python学习第十节:爬虫基于requests库的方法

news2024/9/20 16:35:06

python学习第十节:爬虫基于requests库的方法

在这里插入图片描述

requests模块的作用:
发送http请求,获取响应数据,requests 库是一个原生的 HTTP 库,比 urllib 库更为容易使用。requests 库发送原生的 HTTP 1.1 请求,无需手动为 URL 添加查询串, 也不需要对 POST 数据进行表单编码。相对于 urllib 库, requests 库拥有完全自动化 Keep-alive 和 HTTP 连接池的功能。

requests的请求方式

import requests
requests.get("http://httpbin.org/get") #GET请求
requests.post("http://httpbin.org/post") #POST请求
requests.put("http://httpbin.org/put") #PUT请求
requests.delete("http://httpbin.org/delete") #DELETE请求
requests.head("http://httpbin.org/head") #HEAD请求
requests.options("http://httpbin.org/OPTIONS") #OPTIONS请求

1.requests模块发送get请求

GET 参数说明:res = requests.get(url,headers=headers,params,timeout)
• url:要抓取的 url 地址。
• headers:用于包装请求头信息。
• params:请求时携带的查询字符串参数。
• timeout:超时时间,超过时间会抛出异常。

# 简单的代码实现
import requests 
# 目标url
url = 'https://www.baidu.com' 
# 向目标url发送get请求
response = requests.get(url)
# 打印响应网页内容
print(response.text)
获取响应的网页内容

response.text:返回字符串类型数据

import requests 
# 向目标url发送get请求
response = requests.get('https://www.baidu.com' )
# 打印响应内容
print(response.text)

response.content:返回 bytes 类型数据,decode返回的也是字符串效果等同于response.text

# response.content
import requests 
# 向目标url发送get请求
response = requests.get('https://www.baidu.com' )
# 打印响应内容
print(response.content) # 注意这里!
# 通过对response.content进行decode,来解决中文乱码
print(response.content.decode()) 
response.content.decode() # 默认utf-8
response.content.decode("GBK") # 改变编码格式

查看响应的url:

import requests
response = requests.get("http://httpbin.org/get")
print(response.url)

服务器返回的cookies:

import requests
response = requests.get("http://httpbin.org/get")
print(response.cookies)

查看响应的headers头:

import requests
response = requests.get("http://httpbin.org/get")
print(response.headers)
反爬添加 headers 的请求

我们在访问一些加了反爬检测的网站时会别识别为爬虫;我们加了header之后就会轻松绕过。

import requests
url = 'https://movie.douban.com/top250'
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=header)
print(response.text)
请求时携带参数

爬取动态网页时我们需要传递不同的参数获取 不同的内容;GET 传递参数有两种方法,可以直接在链接中添加参数或者利用 params 添加参数。

url发送带参数的请求:

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
url = 'https://search.douban.com/movie/subject_search?search_text=肖申克的救赎'
response = requests.get(url, headers=headers)
print(response.text)

通过 params 携带参数字典:
需要把请求的关键存在字典变量里,发送请求的时候带上字典

import requests
headers = {
           "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}
# 这是目标url
url = 'https://search.douban.com/movie/subject_search?'
# 请求参数是一个字典
kw = {'search_text': '肖申克的救赎'}
# 带上请求参数发起请求,获取响应
response = requests.get(url, headers=headers, params=kw)
print(response.text)
调用json() 方法

如果我们访问之后获得的数据是JSON格式的,那么我们可以使用json方法,直接获取转换成宁典格式的数据。

但是需要注意的是,如果返回的结果不是JSON格式,便会出现解析错误,抛出异常!

import requests
response = requests.get("http://httpbin.org/get")
print(response.text)
print(response.json())
print(type(response.json()))
参数中携带cookie

网站经常利用请求头中的 Cookie 字段来做用户访问状态的保持,那么我们可以在 headers 参数中添加 Cookie ,模拟普通用户的请求。

可以先获取网站cookie:

import requests
url = 'https://movie.douban.com/'
response = requests.get(url)
print(response.cookies)
#print(r.cookies.items())
# 响应的cookies
for key, value in response.cookies.items():
    print(f"{key} = {value}")

再使用cookie访问登录后网站内容

import requests
import re
# 构造请求头字典
headers = {
# 从浏览器中复制过来的User-Agent
    "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
# 从浏览器中复制过来的Cookie
    "cookie": 'bid = Mx0Pmwb-qI8'
}
# 请求头参数字典中携带cookie字符串
response = requests.get('https://www.douban.com/doumail/', headers=headers)
data = re.findall('<div id="content">(.*?)<h1>(.*?)</h1>',response.text)
print(response.status_code)
print(data)

通过cookies参数来设置,将cookies构造字典传入cookies字段

import requests
url = "'https://user.qzone.qq.com/这里写上要登录的QQ号/infocenter'"
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}
cookies={"Cookie":"123456789"}
r = requests.get(url, headers=headers,cookies=cookies)
print(r.text)
获取原始响应内容
import requests
response = requests.get("http://httpbin.org/get")
print(response.raw)
指定响应字符编码
print(response.encoding)  # 查看响应字符编码
response.encoding="utf-8"    #更改为utf-8编码
重定向allow_redirects

在网络请求中,通常都会存在重定向问题,在Requests中是默认开启允许重定向的,如果存在重定向时,自动继续跟随访问

import requests
response = requests.get("http://httpbin.org/get",allow_redirects=False)

2.requests模块发送post请求

方法:post(url, data=None, json=None, **kwargs)

import requests
payload = {"username": "admin", "password": "123456"}
#response = requests.post("http://httpbin.org/post", data={'usernaem':'admin'}
response = requests.post("http://httpbin.org/post", data=payload)
print(response.text)
POST 请求抓取网页
import requests

wd = {"search_text": "金瓶梅"}
# 准备伪造请求
headers = {
# User-Agent:首字母大写,表示请求的身份信息;一般直接使用浏览器的身份信息,伪造爬虫请求
# 让浏览器认为这个请求是由浏览器发起的[隐藏爬虫的信息]
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.41"
}
# 发送POST请求,附带要翻译的表单数据--以字典的方式进行传递
response = requests.post("https://search.douban.com/movie/subject_search?", data=wd)
print(response.url)
# 打印返回的数据
# print(response.content)
print(response.content.decode("utf-8"))
# print(response.text.encode("utf-8"))
使用Session维持登录信息
import requests
import re
# 构造请求头字典
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
}
# 实例化session对象
session = requests.session()
# 访问登陆页获取登陆请求所需参数
response = session.get('https://github.com/login', headers=headers)
authenticity_token = re.search('name="authenticity_token" value="(.*?)" />',response.text).group(1)  # 使用正则获取登陆请求所需参数
# 构造登陆请求参数字典
data = {
'commit': 'Sign in', # 固定值
'utf8': ' ', # 固定值
'authenticity_token': 'authenticity_token', # 该参数在登陆页的响应内容中
'login':input('输入github账号:'),
'password':input('输入github账号:')
}
# 发送登陆请求(无需关注本次请求的响应)
session.post('https://github.com/session', headers=headers, data=data)
# 打印需要登陆后才能访问的页面
response = session.get('https://github.com/settings/profile', headers=headers)
print(response.text)
from requests import sessions
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',

    }
session = sessions.Session()
response = session.get("https://www.baidu.com/s?wd=python",headers=headers)
print(response.text)
# or
# requests = sessions.Session()
# response = requests.get("https://www.baidu.com/s", params={"wd": "python"})

print(u"请求的URL: ", response.request.url)
print(u"请求的参数(GET方法专属): ", response.request.path_url)
print(u"请求的Method: ", response.request.method)
print(u"请求的头: ", response.request.headers)

print(u"响应状态码: ", response.status_code)
print(u"响应头: ", response.headers)
print(u"响应内容: ", response.content)

print(u"请求所带的cookie和响应所返回的cookie集合: ", response.cookies)
print(u"总共耗时: ", response.elapsed)
proxies 代理参数的使用

在爬虫开发过程中,经常会遇到被封IP或者频繁访问同一网站被限制访问等问题。这时,使用代理IP就可以避免这些问题,保证爬虫程序正常运行。

代理IP是指通过代理服务器获取的IP地址,因为代理服务器具有隐藏用户真实IP、改变客户端访问地址、提高访问速度、突破访问限制等功能,所以使用代理IP可以实现一些数据获取的目的。

在Python中,使用urllib库实现网页访问时,可以通过设置代理IP来实现IP轮换、反反爬虫等功能。下面,我们以爬取某个网站为例,讲解如何设置代理IP。

首先,我们需要从免费的代理IP网站上获取代理IP,这里以站大爷代理为例,代码如下:

import requests
from bs4 import BeautifulSoup
def get_proxy():
	url = 'https://www.zdaye.com/free/'
	headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
	r = requests.get(url, headers=headers)
	soup = BeautifulSoup(r.text, 'html.parser')
	table = soup.find('table', attrs={'id': 'ip_list'})
	proxies = []
	for row in table.tbody.find_all('tr'):
		if row.find_all('td')[4].string == 'HTTP':
			proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
			proxies.append(proxy)
	return proxies

上面的代码中,我们使用requests库访问西刺代理网站,获取网页内容。然后,使用BeautifulSoup库解析网页内容,获取代理IP信息。

获取到代理IP后,我们需要测试这些代理IP是否可用,筛选出可用的代理IP。代码如下:

import requests
def test_proxy(proxy):
	url = 'https://www.baidu.com'
	proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
	try:
		r = requests.get(url, proxies=proxies, timeout=10)
		if r.status_code == 200:
			return True
		else:
			return False
	except:
		return False
		
def get_valid_proxies(proxies):
	valid_proxies = []
	for proxy in proxies:
		if test_proxy(proxy):
			valid_proxies.append(proxy)
	return valid_proxies

在上面的代码中,我们使用requests库通过代理IP访问百度网站,如果返回状态码为200,则说明代理IP可用。如果访问出现异常或者状态码不为200,则说明代理IP不可用。

获取到可用的代理IP后,我们就可以使用这些代理IP来访问指定的网站。代码如下:

import random
import requests
def get_html(url, proxies):
	proxy = random.choice(proxies)
	proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
	headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
	try:
		r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
		if r.status_code == 200:
			return r.text
		else:
			return None
	except:
		return None

上面的代码中,我们使用random库随机选择一个代理IP,然后使用requests库访问指定的网站。在访问时,需要将代理IP添加到proxies参数中,这样就可以使用代理IP来访问指定的网站了。

完整代码

import random
import requests
from bs4 import BeautifulSoup
def get_proxy():
	url = 'https://www.zdaye.com/free/'
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
	r = requests.get(url, headers=headers)
	soup = BeautifulSoup(r.text, 'html.parser')
	table = soup.find('table', attrs={'id': 'ip_list'})
	proxies = []
	for row in table.tbody.find_all('tr'):
		if row.find_all('td')[4].string == 'HTTP':
			proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
			proxies.append(proxy)
	return proxies

def test_proxy(proxy):
	url = 'https://www.baidu.com'
	proxies = {'http': 'http://' + proxy, 'https': 'https//' + proxy}
	try:
		r = requests.get(url, proxies=proxies, timeout=10)
		if r.status_code == 200:
			return True
		else:
			return False
	except:
		return False

def get_valid_proxies(proxies):
	valid_proxies = []
	for proxy in proxies:
		if test_proxy(proxy):
			valid_proxies.append(proxy)
	return valid_proxies


def get_html(url, proxies):
	proxy = random.choice(proxies)
	proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
	try:
		r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
		if r.status_code == 200:
			return r.text
		else:
			return None
	except:
		return None

if __name__ == '__main__':
	url = 'https://www.baidu.com'
	proxies = get_proxy() #获取代理IP
	valid_proxies = get_valid_proxies(proxies) #获取可用的代理IP
	html = get_html(url, valid_proxies) #使用代理IP访问指定的网站,并返回HTML内容。
	print(html)

在上面的代码中,我们首先定义了一个函数get_proxy(),用于获取代理IP。然后,定义了一个函数test_proxy(),用于测试代理IP是否可用。接下来,定义了一个函数get_valid_proxies(),用于获取可用的代理IP。最后,定义了一个函数get_html(),用于使用代理IP访问指定的网站,并返回HTML内容。

上传文件
url = 'https://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
print('\n', r.text)

requests版的豆瓣电影top250完整版代码

from bs4 import BeautifulSoup
import re
import requests
# import urllib.request, urllib.error
import xlwt
import sqlite3

# urllib.parse模块是一个用于解析URL的工具包,支持各种对URL的操作,包括拆分、拼接、编码、解码等。
import urllib.parse

def main():
    baseurl = "https://movie.douban.com/top250?start="
    print("爬虫开始....")
    datalist = get_data(baseurl)
    save_path = r"D:\豆瓣网电影TOP250.xls"
    save_data(datalist, save_path)
    dbpath = "test1.db"
    saveData2DB(datalist,dbpath)

# 影片详情链接的规则
findLink = re.compile(r'<a href="(.*?)">')   # 创建正则表达式对象,表示规则(字符串的模式)
# 影片图片
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S)  # re.s 让换行符包含在字符中
# 影片片名
findTitle =re.compile(r'<span class="title">(.*)</span>')
# 影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 找到评价人数
findJudge =re.compile(r'<span>(\d*)人评价</span>')
# 找到概况
findInq =re.compile(r'<span class="inq">(.*)</span>')
# 找到影片的相关内容
findBd = re.compile(r'<p class="">(.*?)</p>',re.S)
#   爬取所有网页内容
def get_data(baseurl):
    datalist = []
    # 循环爬取所有页面
    for i in range(0,10):
        url = baseurl + str(i*25)
        html = askurl(url)
        #print(html)

        # 逐一解析数据 把html使用html.parser进行解析
        soup = BeautifulSoup(html, "html.parser")

        # 引入正则表达式,匹配满足的特征的字符串
        for item in soup.find_all("div", class_="item"):   #查找符合要求的字符串,形成列表
            #print(item) #测试:查看电影item全部信息
            #break
            data = []  #用于保存所有数据
            item = str(item)
            Link = re.findall(findLink, item)[0]  # re.findall查询所有符合条件的字符串,返回一个列表
            data.append(Link)
            ImgSrc = re.findall(findImgSrc, item)[0]
            data.append(ImgSrc)
            Titles = re.findall(findTitle, item)     #片名可能只有一个中文名,没有外国名
            if (len(Titles)) == 2:
                ctitle = Titles[0]
                data.append(ctitle)             #添加中文名
                otitle = Titles[1].replace("/","")
                data.append(otitle)            #添加外国名
            else:
                data.append(Titles[0])
                data.append(" ")           #外国名字留空
            Rating = re.findall(findRating, item)[0]
            data.append(Rating)
            Judge = re.findall(findJudge, item)[0]
            data.append(Judge)
            Inq = re.findall(findInq, item)
            if (len(Inq) != 0 ):
                Inq = Inq[0].replace("。","")                     # 去掉 。
                data.append(Inq)
            else:
                data.append(" ")
            Bd = re.findall(findBd, item)[0]
            Bd = re.sub(r'<br(\s+)?/>(\s+)?',"",Bd)   # 去掉换行符<br/>
            Bd = re.sub(r'/', "", Bd)                 # 去掉 /
            data.append(Bd.strip())
            datalist.append(data)
            # print(len(datalist))
    return datalist


def save_data(datalist,save_path):
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)
    sheet = book.add_sheet("豆瓣网电影TOP250",cell_overwrite_ok=True)
    col = ("电影链接","图片链接","电影中文名称","电影外语名称","电影评分","评论人数","电影概述","电影的相关内容")
    for i in range(len(col)):
        sheet.write(0,i,col[i])
    for i in range(len(datalist)):
        data = datalist[i]
        #print('爬到到第%d行了' % i)
        for j in range(len(data)):

            sheet.write(i+1, j,data[j])

    book.save(save_path)

def saveData2DB(datalist,dbpath):
    init_db(dbpath)
    conn =sqlite3.connect(dbpath)
    cur =conn.cursor()
    for data in datalist:
        for index in range(len(data)):
            if index == 4 or index ==5:
                continue
            data[index]='"'+data[index]+'"'
        sql1 ='''
                insert into movie250(info_link,pic_link,cname,ename,score,rated,instroduction,info)
                values(%s)'''% ",".join(data)
        print(sql1)
        cur.execute(sql1)
        conn.commit()
    cur.close()
    conn.close()

def init_db(dbpath):
    sql = '''
        create table movie250
        (
        id integer primary key autoincrement,
        info_link text,
        pic_link text,
        cname varchar,
        ename varchar,
        score numeric,
        rated numeric,
        instroduction text,
        info text
        )
    '''
    print(sql)
    conn = sqlite3.connect(dbpath)
    c = conn.cursor()
    c.execute(sql)
    conn.commit()
    conn.close()

# 爬取单个网页内容
def askurl(url):
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/121.0.0.0 Safari/537.36"
    }
    req = requests.get(url, headers=headers)
    try:
        html = req.content.decode('utf-8')
        # print(html)
    except requests.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    except Exception as e:
        print(e)

    return html


if __name__ == '__main__':
    main()
    # askurl('https://movie.douban.com/top250')
    print("爬虫结束")```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Notepad++插件:TextFX 去除重复行

目录 一、下载插件 TextFX Characters 二、去重实操 2.1 选中需要去重的文本 2.2 操作插件 2.3 结果展示 2.3.1 点击 Sort lines case sensitive (at column) 2.3.2 点击 Sort lines case insensitive (at column) 一、下载插件 TextFX Characters 点【插件】-【插件管理…

unity编辑器c#脚本

目录 1.编辑器窗口再介绍 1.1添加对象 1.2文件夹的管理 1.3参数的设置 1.4对象的移动方式 2.对于外形和材质的修改 2.1对于外形的修改 2.2对于材质的修改 3.添加有趣的组件 3.1如何添加组件 3.2添加刚体组件 3.3碰撞器的介绍 3.4添加c#组件 3.5c#脚本代码的说明 1…

通过知识蒸馏提升大模型训练效率

人工智能咨询培训老师叶梓 转载标明出处 随着模型规模的不断扩大&#xff0c;如GPT-4这样的模型拥有约1.7万亿参数&#xff0c;其预训练所需的巨大能源和计算资源引发了对可持续发展AI解决方案的迫切需求。麦吉尔大学的研究团队介绍了一种创新的方法来解决与LLMs预训练相关的效…

MySQL5.7基于mysqldump、xtrbackup、innobackupex工具进行全量备份/恢复、增量备份/恢复

mysql全量备份脚本 文章目录 前言一、数据库备份分类二、为什么需要备份&#xff1f;三、备份工具示例1.逻辑备份工具1.1.使用场景1.2.备份操作示例1.3.恢复操作示例 2.物理备份工具2.1.xtrbackup介绍2.2.使用场景2.3.安装percona-xtrabackup2.4.xtrbackup备份原理2.5.percona-…

西门子PLC读取时间相差8小时

当前时间与PLC读取到的时间相差8小时&#xff0c;如下图所示 原因&#xff1a;指令问题 模块时间总是存储在 CPU 时钟中&#xff0c;而不带因子“本地时区”或“夏令时”。之后&#xff0c;CPU 时钟将基于模块时间计算 CPU 时钟的本地时间。 解决办法&#xff1a;将读取时间指…

leetcode hot100_part01_哈希

1.两数之和 遍历数组&#xff0c;map中存在target - nums[i]就返回结果&#xff0c;不存在就把当前元素存入map; 49.字母异位词分组 分组&#xff0c;怎么分&#xff0c;用hashMap, key为每一组的标识&#xff0c;value为每一组包含的字符串&#xff08;属于同一组的&#xff…

【笔记】第一节. 引言

• 轨道用钢的加工过程 • 钢轨结构及其标准 • 轨道结构特点 • 钢轨的商业化及其发展趋势 轨道用钢的加工过程 钢轨形式及其标准 钢轨的基本结构 轨头、轨腰、轨底。 钢轨的技术标准 • 铁道行业标准《TB/T2344-2003&#xff1a;43&#xff5e;75 kg/m 热轧钢轨订货技术…

腾讯云Ubuntu系统安装宝塔,配置Java环境,运行spring boot项目

致谢 本次学习宝塔部署spring boot项目&#xff0c;参考如下资料 https://www.cnblogs.com/daen/p/15997872.html 系统安装宝塔 直接用的腾讯云云服务器面板上的登录&#xff0c;你可以换成 xshell 进入宝塔官网&#xff1a; https://www.bt.cn/new/download.html 我们采…

【Android】Handler用法及原理解析

文章目录 用处基本用法用法一&#xff1a;使用sendMessage和handleMessage方法用法二&#xff1a;使用post方法 法一工作原理Handler的sendMessageMessage成员变量 MessageQueueLooper主线程自动初始化子线程手动创建**prepare**loop Handler的dispatchMessage 法二工作原理Han…

机器学习中最常见的50个问题(进阶篇)

机器学习中最常见的50个问题 进阶篇 1.解释SVM的工作原理。 SVM&#xff0c;全称支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种有监督学习算法&#xff0c;主要用于解决数据挖掘或模式识别领域中的数据分类问题。 SVM的工作原理是建立一个最…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性&#xff0c;它是ES11&#xff08;ES2020&#xff09;中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时&#xff0c;会短路&#xff0c;直接返回undefined&#xff0c;如果存在&#xff0c;那么…

小程序开发设计-小程序简介①

1.小程序与普通网页开发的区别&#xff1a; 1.运行环境不同&#xff1a; 网页运行在浏览器环境中。 小程序运行在微信环境中。 2.API不同&#xff1a; 由于运行环境不同&#xff0c;所以小程序中&#xff0c;无法调用DOM和BOM的API。但是&#xff0c;小程序中可以调用微信环境提…

摊牌了!一文教会你轻松上手豆包MarsCode 编程助手!

豆包MarsCode 编程助手是豆包旗下的 AI 编程助手&#xff0c;提供以智能代码补全为代表的 AI 功能。豆包MarsCode 编程助手支持主流的编程语言和 IDE&#xff0c;在开发过程中提供单行代码或整个函数的编写建议。此外&#xff0c;它还支持代码解释、单测生成和问题修复等功能&a…

收藏!6个PPT素材模板网站,快速做出好看的PPT

找PPT模板一定要收藏好这6个网站&#xff0c;能让你快速做出好看的PPT&#xff0c;重点十可以免费下载&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都…

时序必读论文05|PatchTST : 时序数据Patch已成趋势【ICLR 2023】

书接上回&#xff0c;我们在之前的文章已经分析了直接把transformer应用到时间序列预测问题的不足&#xff0c;其中我们总结了4个不足&#xff1a;分别是&#xff1a; 注意力机制的计算复杂度高&#xff0c;为 O(N^2)&#xff0c;并且计算得出的权重仅有少部分有用&#xff1b;…

【TCP三次握手+四次挥手(个人理解版本)】

TCP协议介绍 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff08;它是全双工工作模式&#xff09;。以下是对它的具体介绍&#xff1a; 基本概念 定义&#xff1a;TCP是Transmission Control Protocol的缩写&#xff…

PHP无缝对接预订无忧场馆预订系统小程序源码

无缝对接&#xff0c;预订无忧 —— 场馆预订系统&#xff0c;让每一次活动都完美启航&#xff01; 一、告别繁琐流程&#xff0c;预订从未如此简单 你是否曾经为了预订一个合适的场馆而焦头烂额&#xff1f;繁琐的咨询、确认、支付流程&#xff0c;让人心力交瘁。但现在&…

如何利用Java进行快速的足球大小球及亚盘数据处理与分析

在当今信息爆炸的时代&#xff0c;大量的数据产生和积累&#xff0c;对于企业和个人来说&#xff0c;如何高效地处理和分析这些数据成为了一项重要的任务。Java作为一门强大的编程语言&#xff0c;提供了丰富的工具和库&#xff0c;可以帮助我们快速进行数据处理与分析。下面将…

vue3中实现拖拽排序(vue-draggable-next的使用)

1.安装插件 npm i vue-draggable-next 2.引入使用 <template> <vue-draggable-next v-model"list" tag"div" handle".warn-card" group"warngroup" ghost-class"ghost"class"mb10 warn-card-box" ani…

【mysql】逻辑运算符

逻辑运算符 逻辑运算符主要是为了判断表达式的真假,返回结果也是1,0,null OR 这里面或就是两个条件或的关系,比如我要department_id等于10和等于20的情况就可以使用或. SELECT last_name,salary,department_id FROM employees WHERE department_id10 OR department_id20 …