一、requests入门
01.requests发送get请求
"""
准备:安装requests库 pip install requests
导入requests库 import requests
需求:使用代码获取网站首页内容
步骤:
1、地址:https://baidu.com/
2、发送请求:
requests.get(url='请求地址‘)
3、获取返回信息:
"""
#导入requests请求魔模块
import requests
#指定地址
url = "https://baidu.com/"
#使用requests发送请求:请求百度首页
requests.get(url=url)
#接受返回的结果
response = requests.get(url=url)
#打印结果
print(response.text)
02.响应数据的获取
"""
准备:安装requests库 pip install requests
导入requests库 import requests
需求:使用代码获取网站首页内容
步骤:
1、地址:https://baidu.com/
2、发送请求:
requests.get(url='请求地址‘)
3、获取返回信息:
"""
#导入requests请求魔模块
import requests
#指定地址
url = "https://baidu.com/"
#使用requests发送请求:请求百度首页
requests.get(url=url)
#接受返回的结果
response = requests.get(url=url)
#打印结果
#print(response.text)
# print(response.content.decode())
"""
响应数据的获取:
方式一:response.text 获取的是字符串
方式二:response.content 获取的是原始二进制数据(bytes类型数据)
方式三:response.content.decode() decode:对二进制的字符串(bytes类型)转换为字符串类型
"""
# 获取http状态码
status = response.status_code
#获取响应对应的请求头
qqt = response.request.headers
#获取响应头
headers = response.headers
#获取cookies
cookies = response.cookies
#获取响应对应的请求cookies
xdq = response.request.cookies
03.str与bytes数据类型的转换
"""
str :字符串数据类型
bytes :bytes类型数据
encode:对字符串进行编码,转换为二进制格式(bytes类型)
decode:对二进制的字符串(bytes类型)转换为字符串类型
"""
# 字符串
s = '你好'
#字符串转换为bytes类型
res = s.encode()
print(res)
#bytes类型的字符串(二进制字符串)
ss = b'\xe4\xbd\xa0\xe5\xa5\xbd'
#将bytes类型转换为字符串类型
res2 = ss.decode()
print(res2)
04.发送请求携带请求头
"""
准备:安装requests库 pip install requests
导入requests库 import requests
需求:使用代码获取网站首页内容
步骤:
1、地址:https://baidu.com/
2、发送请求:
requests.get(url='请求地址‘)
3、获取返回信息:
"""
#导入requests请求魔模块
import requests
#指定地址
url = "https://baidu.com/"
#请求头(字典格式)
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
#使用requests发送请求:请求百度首页
requests.get(url=url,headers=headers)
#接受返回的结果
response = requests.get(url=url,headers=headers)
#打印结果
print(response.content.decode())
# 获取请求的请求头信息
print(response.request.headers)
"""
{
'User-Agent'(客户端身份): 'python-requests/2.31.0',
'Accept-Encoding'(解码类型): 'gzip, deflate',
'Accept'(请求的数据): '*/*', (任何数据)
'Connection'(连接形式): 'keep-alive'(保持长连接)
}
"""
05.通过requests发送请求下载图片
#导入 requests
import requests
# 指定图片url
url = "https://gips0.baidu.com/it/u=2298867753,3464105574&fm=3028&app=3028&f=JPEG&fmt=auto?w=960&h=1280"
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url,headers=headers)
'''
将响应的内容写入到一个图片文件中
写 打开 文件名.类型 , 打开模式wb二进制 没有此文件则新建一个
with open ("小老虎.jpg" , "wb" ) as f:
写 响应 . 响应内容
f.write(response.content)
'''
with open ("小老虎.jpg", "wb") as f:
f.write(response.content)
06.发送请求下载网页
#导入 requests
import requests
# 指定图片url
url = "https://baidu.com/"
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url,headers=headers)
# 写入文件
with open ("baidu.html", "w", encoding='utf-8') as f:
f.write(response.content.decode())
07.通过requests下载网易云音乐
#导入 requests
import requests
# 指定歌曲url
url = "https://m801.music.126.net/20240518151902/76009f53fc78d5fb0bcd97232dac745f/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/36033303850/01e3/e373/23d3/4fc9b631eecdf5079be76c28e853985b.m4a"
# 请求头
headers = {
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url)
# 写入文件(视频,图片,音频都需要用wb模式)
with open ("红草莓.m4a", "wb") as f:
f.write(response.content)
08.反爬虫手段
1.检测请求头中的User-Agent是否是一个正常浏览器的User-Agent
解决方案:自己设置User-Agent
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
2.检测请求的来源(请求头中的Referer属性)(这个请求发送之前打开的是那个页面)------防盗链接
解决方案:抓包看一下发送穹丘的啊hi后,浏览器发送的Referer值是什么,然后在代码中的请求头中加入Referer
'Referer':"https://passport.china.com/logon"
二、xpath数据提取
01.获取豆瓣top250的网页数据
#导入 requests
import requests
# 指定图片url
url = "https://movie.douban.com/top250"
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url,headers=headers)
# 写入文件
with open ("douban.html", "w", encoding='utf-8') as f:
f.write(response.content.decode())
02.在python中使用xpath提取网页数据
"""
导入lxml
将获取的网页内容转换为xml
通过xpath去定位和解析页面中的内容
xpath数据提取技巧:
1.定位包含所有数据的元素<ol> //ol
2.再从中找到包含单条数据所有内容的标签<li> //ol/li
3.对定位包含所有元素的列表进行遍历,得到包含单条数据的元素
4.在提取单条数据中的详细内容
"""
# 导入lxml
from lxml import etree
# 读取html网页内容(请求得到的response.content.decode()) ,读取模式 直接读出
page = open('douban.html', 'r', encoding='utf-8').read()
#将获取的网页内容转换为xml
html = etree.HTML(page)
#通过xpath去定位和解析提取页面中的内容
# titles = html.xpath("//*[@class='title']")
# 获取文本
titles = html.xpath("//*[@class='title'][1]/text()")
# 获取评分
score = html.xpath("//*[@class='rating_num'][1]/text()")
# 显示共有多少个
# print(len(titles))
# 显示内容
print(titles)
print(score)
03.批量提取数据的方式
"""
导入lxml
将获取的网页内容转换为xml
通过xpath去定位和解析页面中的内容
xpath数据提取技巧:
1.定位包含所有数据的元素<ol> //ol
2.再从中找到包含单条数据所有内容的标签<li> //ol/li
3.对定位包含所有元素的列表进行遍历,得到包含单条数据的元素
4.在提取单条数据中的详细内容
"""
# 导入lxml
from lxml import etree
# 读取html网页内容(请求得到的response.content.decode()) ,读取模式 直接读出
page = open('douban.html', 'r', encoding='utf-8').read()
#将获取的网页内容转换为xml
html = etree.HTML(page)
# 定位包含所有数据的元素<ol>再从中找到包含单条数据所有内容的标签<li>
data_list = html.xpath('//ol/li')
# 显示li标签
# print(data_list)
# 对定位包含所有元素的列表进行遍历,得到包含单条数据的元素
for li in data_list:
title = li.xpath(".//span[@class='title'][1]/text()")
score = li.xpath(".//span[@class='rating_num'][1]/text()")
number = li.xpath(".//div[@class='star']/span[last()]/text()")
print("电影的名称:",title[0],"电影的评分:",score[0],"评价人数:",number[0])
04.top250电影住区代码优化
"""
# 获取单页数据:
# 导入lxml
from lxml import etree
#导入 requests
import requests
# 指定图片url
url = "https://movie.douban.com/top250"
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url,headers=headers)
# 读取html网页内容(请求得到的response.content.decode()) ,读取模式 直接读出
page = response.content.decode()
#将获取的网页内容转换为xml
html = etree.HTML(page)
# 定位包含所有数据的元素<ol>再从中找到包含单条数据所有内容的标签<li>
data_list = html.xpath('//ol/li')
# 对定位包含所有元素的列表进行遍历,得到包含单条数据的元素
for li in data_list:
title = li.xpath(".//span[@class='title'][1]/text()")
score = li.xpath(".//span[@class='rating_num'][1]/text()")
number = li.xpath(".//div[@class='star']/span[last()]/text()")
print("电影的名称:",title[0],"电影的评分:",score[0],"评价人数:",number[0])
"""
"""
准备好top250电影的url,放入列表中
遍历列表中的url,进行抓取
代码优化
"""
# 导入lxml
from lxml import etree
#导入 requests
import requests
def get_data(url):
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url, headers=headers)
# 读取html网页内容(请求得到的response.content.decode()) ,读取模式 直接读出
page = response.content.decode()
# 将获取的网页内容转换为xml
html = etree.HTML(page)
# 定位包含所有数据的元素<ol>再从中找到包含单条数据所有内容的标签<li>
data_list = html.xpath('//ol/li')
# 对定位包含所有元素的列表进行遍历,得到包含单条数据的元素
for li in data_list:
title = li.xpath(".//span[@class='title'][1]/text()")
score = li.xpath(".//span[@class='rating_num'][1]/text()")
number = li.xpath(".//div[@class='star']/span[last()]/text()")
print("电影的名称:", title[0], "电影的评分:", score[0], "评价人数:", number[0])
if __name__ == '__main__':
get_data("https://movie.douban.com/top250")
get_data("https://movie.douban.com/top250?start=25&filter=")
get_data("https://movie.douban.com/top250?start=50&filter=")
get_data("https://movie.douban.com/top250?start=100&filter=")
get_data("https://movie.douban.com/top250?start=125&filter=")
05.top250电影翻页抓取
"""
# 生成url
base_url = "https://movie.douban.com/top250?start={}&filter="
for i in range(10):
url = base_url.format(i*25)
print(url)
"""
# 导入lxml
from lxml import etree
#导入 requests
import requests
class Douban:
base_url = "https://movie.douban.com/top250?start={}&filter="
# 定义一个属性用于保存所有url
def __init__(self):
self.url_list = []
#生成所有页面的url地址保存到url_list属性中
for i in range(10):
url = self.base_url.format(i * 25)
self.url_list.append(url)
#抓取单页数据
def get_page_data(self,url):
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求requests.get(url=url)获取相应信息(response)
response = requests.get(url=url, headers=headers)
# 读取html网页内容(请求得到的response.content.decode()) ,读取模式 直接读出
page = response.content.decode()
# 将获取的网页内容转换为xml
html = etree.HTML(page)
# 定位包含所有数据的元素<ol>再从中找到包含单条数据所有内容的标签<li>
data_list = html.xpath('//ol/li')
# 对定位包含所有元素的列表进行遍历,得到包含单条数据的元素
for li in data_list:
title = li.xpath(".//span[@class='title'][1]/text()")
score = li.xpath(".//span[@class='rating_num'][1]/text()")
number = li.xpath(".//div[@class='star']/span[last()]/text()")
print("电影的名称:", title[0], "电影的评分:", score[0], "评价人数:", number[0])
def run(self):
for url in self.url_list:
print("-----------------开始抓取页面:",url)
self.get_page_data(url)
if __name__ == '__main__':
db = Douban()
db.run()
06.xpath语法
nodename 选取此节点的所有节点
/ 从根节点开始选取
// 从当前节点开始选取(跟节点下的所有节点元素)
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
路径表达式:
div 选取div元素的所有节点
/div 选取div跟元素
div/a 选取div元素的子元素a
//div 选取所有div子元素
div//p 选取div元素的后代的所有div元素
//@lang 选取选取名为lang的所有属性
根本用法:
根节点下(/)有<head> <body>
找根节点下的 节点ol 找ol节点下的li节点(//ol/li)
/ / ol /li
找根节点下的 节点ol @class属性
/ /ol /@class
找根节点下的 节点ol 找ol节点下的li节点 li节点下的span [过滤条件]
/ /ol /li / /span[@class="title"]
谓语条件:
选取属于ul 子元素的第一个 li元素(/ul/li[1])
/ul /li [1]
找根节点下的 节点ol 找ol节点下的li节点 li节点下的spanspan[@class="title"]的第一个元素
//ol/li//span[@class="title"][1]
选取属于/ol 子元素的最后一的 span[@class="title"] 元素
//ol/li//span[@class="title"][last()]
选取属于/ol 子元素的倒数第二的 span[@class="title"] 元素
//ol/li//span[@class="title"][last()-1]
选取未知节点:
//*[@class="title"]
选取div元素的所有子元素
/div*
选取文档中的所有元素
//*
选取html下的任意节点元素
html/node()/a/@*
选取带有属性的div元素
//div[@*]
模糊匹配:
跟目录下 text文件中包含”当“字的文件
//*[contains(text(),"当")]
//*[contains(@属性,值)]
//*[contains(@attr,200)]
python 中使用xpath
安装lxml:
pip instakll lxml
三、带参数的页面爬取
01.requests请求参数的传递方式
"""
方式一:
直接拼接在url后面
https://www.baidu.com/s?ie=UTF-8&wd=%E9%95%BF%E5%9F%8E
https://movie.douban.com/top250?start=0&filter=
"""
# # 导入requests 方式一:直接拼接在url后面
# import requests
#
# # 指定url
# url = "https://www.baidu.com/s?ie=UTF-8&wd=%E9%95%BF%E5%9F%8E"
#
# # 请求头
# headers = {
# "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
# }
#
# #接收返回的结果
# response = requests.get(url=url,headers=headers)
#
# # 显示获取结果
# print(response.content.decode())
# 导入requests 方式二:通过params参数传递
import requests
# 指定url
url = "https://www.baidu.com/s"
# 请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 请求参数(查询参数)
params = {
'ie': "UTF-8",
'wd': "长城"
}
#接受返回结果时,使用params进行传递
response = requests.get(url=url,headers=headers,params=params)
# 显示获取结果
print(response.content.decode())
02.requests发送post请求
"""
发送post请求的功能的方法:
requests。port()
参数传递:
1.表单传递:form-data
requests。port(url,data=字典参数)
2.json参数:
requests。port(url,json=字典参数)
"""
# 导入requests
import requests
# 案例一:百度翻译手机版发送post请求 传递表单参数
url = "https://fanyi.baidu.com/sug"
# 请求参数(查询参数)
params = {
"kw":"python3",
}
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求获取相应信息(response)
response = requests.post(url=url,data=params,headers=headers)
print(response.content.decode())
03.requests发送post请求
"""
发送post请求的功能的方法:
requests。port()
参数传递:
1.表单传递:form-data
requests。port(url,data=字典参数)
2.json参数:
requests。port(url,json=字典参数)
3.参数:
code: ""
email: "3435539036@qq.com"
encryption: 1
mobile: ""
password: "JFA1SybtPsT1KiKg3ZinYA=="
remember: "0"
reqtimestamp: 1716270537480
type: "login"
"""
# 导入requests
import requests
# 案例二:课堂派发送POST请求 传递json参数
url = "https://openapiv5.ketangpai.com//UserAPI/login"
# 请求参数(查询参数)
params = {
'code':"",
'type':"login",
'reqtimestamp': 1716270537480,
'remember': "0",
'password': "JFA1SybtPsT1KiKg3ZinYA==",
'email': "3435539036@qq.com",
'mobile': ""
}
# 请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
}
# 发送请求获取相应信息(response)
response = requests.post(url=url,json=params,headers=headers)
# print(response.content.decode())
# print(response.json())
04.模拟登录的流程
"""
1.通过控制台抓包:
登陆的url地址:
登陆时传递的参数:
请求方法:
2.网站用户鉴别的方式:
1.cookie + session 实现
2.通过token鉴别(浏览器地址与F12地址不同)
3.实现步骤
1.使用cookie + session鉴别的网站模拟登录的流程:
1.传递账号密码,进行登录
2.登陆之后保存cookie(返回时在响应头的set-cookie字段中)
3.请求其他页面时,携带cookie
2.通过token鉴别的网站模拟登录的流程:
1.传递账号密码,进行登录
2.登陆之后保存token(返回时在响应体中)
3.请求其他页面时,携带token
"""
05.中华网模拟登录
"""
模拟登录,访问需要登陆之后才能打开的页面
1.发送登录请求
2.保存cookie信息
3.携带cookie信息请求需要登陆的页面
"""
# 导入requests
import requests
# 登陆地址
login_url = "https://passport.china.com/logon"
# 请求参数(查询参数)
params = {
'userName':"17775990925",
'password':"a546245426"
}
# 请求头
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
'Referer': "https://passport.china.com/logon"
}
# 发送请求进行登录(response)
response = requests.post(url=login_url,data=params,headers=headers)
print(response.content.decode())
# 请求需要登录的页面
res2 = requests.get('https://passport.china.com/',headers=headers)
print(res2.content.decode())
06.requests传递cookie的三种方式
"""
模拟登录,访问需要登陆之后才能打开的页面
1.发送登录请求
2.保存cookie信息
3.携带cookie信息请求需要登陆的页面
4.传递cookie方式:
方式一:以字典格式传递
cookie = {}
requests.post(cookie=cookie)
方式二:以字符串格式传递
headers = {
'Cookie':"字符串格式cookie值"
}
requests.get()
"""
# 导入requests
import requests
# 登陆地址
login_url = "https://passport.china.com/logon"
# 请求参数(查询参数)
params = {
'userName':"17775990925",
'password':"a546245426"
}
# 请求头
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
'Referer': "https://passport.china.com/logon"
}
# 发送请求进行登录(response)
response = requests.post(url=login_url,data=params,headers=headers)
print(response.content.decode())
# ---------方式一:以字典格式传递cookie-----------
# 获取cookie信息
cookie = response.cookies
# 请求需要登录的页面
res2 = requests.get('https://passport.china.com/',headers=headers,cookies=cookie)
print(res2.content.decode())
07.一字符串格式传递cookie
"""
模拟登录,访问需要登陆之后才能打开的页面
1.发送登录请求
2.保存cookie信息
3.携带cookie信息请求需要登陆的页面
4.传递cookie方式:
方式一:以字典格式传递
cookie = {}
requests.post(cookie=cookie)
方式二:以字符串格式传递
headers = {
'Cookie':"字符串格式cookie值"
}
requests.get()
"""
# 导入requests
import requests
# ---------方式二:以字符串格式传递cookie-----------
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
'Referer': "https://passport.china.com/logon",
'Cookie':'SESSION_COOKIE=46; Hm_lvt_cbec92dec763e6774898d6d85460f707=1716272312; JSESSIONID=E8C2935D3D9A62C369520B06B8FAFAC1; Hm_lpvt_cbec92dec763e6774898d6d85460f707=1716278459; nickname=china_2823hxfg16791058; lastlogindate=2024-05-21; lastlogintime="16:02:24"; lastloginip=183.197.61.99; bindMobile="1@177*****925"; CHINACOMID=11aebc10-cb6e-476d-8072-f953d8bf65a27; CP_USER=FKBo6w-aaDELXK1EnoT3DPk1faoTCuWOzIpsuaQNIsJWqiRz6o9drrZQMJZRRbngi7eJikd0sv41eZDrzksZGmumfJyC7TEP5dMN41%2F1QIHag0K39t%2FVBxzGqQTN85yGDbzc7Mtf21I3yLFRNUeRkJJphQBjDXyUilJ6T4hZkczaUzzJCsTyVeqCVs1bNEBlVJl21LerScqkV2HierMz-5HYL8DoELcjmlLJ6WjemIAiC44IuLq2ow%3D%3D; CP_USERINFO=4Gkk4uas%2FGU6V4cAn8Kr14YtZHaRsQ3bb0iKxhYvuaLYLT-rPEFbvbaQzjvqSKm2v8Fd1lQ14weg0PM1aAxGqjzFStaNWwdXEhS3Zzs0jusNqPIZSkWIUHBpa7NyrsBUv2O8QVvh3O4yqW9wAjnfpw%3D%3D; china_variable=jpEe7N32pYz8SAjCjL8fnh2eLZiI1D/EC6dYmS6/lLUOPrHJGj-IxLIHbACvhNcaC9z3Z8pi2hy0JtYoQGGXmsutg32di8lhAZaSKKJ8BFBt-lJZl7B3R-LY1hWhKpza; lastlogindate=2024-05-21; lastlogintime="16:02:24"; lastloginip=183.197.61.99'
}
# 请求需要登录的页面
res2 = requests.get('https://passport.china.com/',headers=headers)
print(res2.content.decode())
08.使用requests中的session自动处理cookie
"""
模拟登录,访问需要登陆之后才能打开的页面
1.发送登录请求
2.保存cookie信息
3.携带cookie信息请求需要登陆的页面
4.传递cookie方式:
方式一:以字典格式传递
cookie = {}
requests.post(cookie=cookie)
方式二:以字符串格式传递
headers = {
'Cookie':"字符串格式cookie值"
}
requests.get()
方式三:requests。session
"""
# 导入requests
import requests
# 登陆地址
login_url = "https://passport.china.com/logon"
# 请求参数(查询参数)
params = {
'userName':"17775990925",
'password':"a546245426"
}
# 请求头
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
'Referer': "https://passport.china.com/logon"
}
#1. 使用requests.session创建一个请求对象
http = requests.session()
#2. 发送请求进行登录(response)
response = http.post(url=login_url,data=params,headers=headers)
#3. 请求需要登录的页面
res2 = http.get('https://passport.china.com/',headers=headers)
print(res2.content.decode())
四、ajax异步加载的数据提取
01.domo抓取异步数据
#导入requests
import requests
# 指定url
url = ""
requests = reponse = requests.get(url)
print(requests.text)
02.TX招聘数据抓取
#导入requests
import requests
# 指定url
url = ""
# 获取数据
reponse = requests.get(url)
# 获取json数据:使用json方法获取响应内容
result = reponse.json()
# 获取所有的岗位数据
Posts = result['Data']['Posts']
# 遍历所有的岗位数据
for item in Posts:
print(item)
03.TX招聘数据分页抓取
# 导入requests
import requests
# 导入time
import time
# 写入文件
f = open ("岗位.txt",'a',encoding='utf-8')
# 设置抓取页数
for i in range(1,11):
# 指定url
url = "https://careers.tencent.com/tencentcareer/api/post/Query"
# 请求参数(查询参数)
params = {
'pageIndex':i,
'timestamp':int(time.time()*100),
'categoryId':"40008,40002001,40002002,40003001,40003002,40003003,40004,40005001,40005002,40006,40007,40009,40010,40011,40001001,40001002,40001003,40001004,40001005,40001006",
'attrId':"1,3,2,5",
'pageSize':20,
'language':"zn-cn",
'area':"cn",
'countryId':"",
'cityId':"",
'bgIds':"",
'productId':"",
'keyword':"",
}
# 获取数据
reponse = requests.get(url,params)
# 获取json数据:使用json方法获取响应内容
result = reponse.json()
# 获取所有的岗位数据
Posts = result['Data']
# 遍历所有的岗位数据
for item in Posts:
print(item)
# 将岗位写入文件
# f.write(str(item))
# 关闭文件
f.close()
04.json语法
{} json对象
[] json数组
json.loads json字符串转换为python字符串
json.dump pyton字符串转换为json字符串
五、json数据的处理
01.json与python数据的转换
"""
json.loads:将json数据转换为python数据格式
json.dumps:将python数据转换为json数据格式
"""
#导入json
import json
# 加载数据
with open('datas.json','r',encoding='utf-8') as f:
j_data = f.read()
print(j_data)
# 将json数据转换为python数据格式
py_data = json.loads(j_data)
print(py_data)
datas2 = {"name": "张三",
"age": "18",
"skill": ["python","html","css","js","java"],
"isDelete": True,
"isActive": False,
"addr": None
}
# 将python数据转换为json数据格式
json_data2 = json.dumps(datas2,ensure_ascii=False,indent=4)
print(json_data2)
# 写入文件
with open("datas.json",'w',encoding='utf-8') as f:
f.write(json_data2)
六、视频抓取
01.B站视频抓取
"""
视频url:
音频url:
"""
# 导入requests
import requests
# 请求头
headers = {
'User-Agent': "",
'Cookie': "",
'Referer':""
}
# 视频url
url1 = ""
# 音频url
url2 = ""
# 发起请求
resp1 = requests.get(url1, headers=headers)
resp2 = requests.get(url2, headers=headers)
with open('sp1.mp4', 'wb') as f:
f.write(resp1.content)
with open('sp2.mp4', 'wb') as f:
f.write(resp2.content)
"""
开始视频合成
安装MoviePy pip install MoviePy
"""
# 开始视频合成
from moviepy.editor import ffmpeg_tools
# 将本地的hh2.MP4和hh3.MP4 合成为 下载文件.MP4
ffmpeg_tools.ffmpeg_merge_video_audio('sp1.np4','sp2.mp4','下载视频.mp4')
02.抖音视频抓取
"""
视频
url = https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cp6vh3vog65paio4vud0&line=0&file_id=911d2050e09548bcaf042affd992f9ed&sign=9c4d93213847699cc113aa9310f13df4&is_play_url=1&source=PackSourceEnum_FEED&aid=6383
"""
# 导入
import requests
# 指定url
url = "https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cp6vh3vog65paio4vud0&line=0&file_id=911d2050e09548bcaf042affd992f9ed&sign=9c4d93213847699cc113aa9310f13df4&is_play_url=1&source=PackSourceEnum_FEED&aid=6383"
# 请求头
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0",
'Cookie': "",
'Referer':""
}
# 发起请求
response = requests.get(url=url,headers=headers)
# 写入文件
with open("抖音视频.mp4", 'wb') as f:
f.write(response.content)