目录
一、编码与解码
1 python的编码和解码
2 文件操作
二、requests模块
1 requests支持的方法
2 get请求
3 反爬
UA反爬
Referer反爬
Cookie反爬
代理IP反爬
雪球网数据抓取
4 session对象
5 图片和视频爬取
图片爬取
视频爬取
一、编码与解码
主要用于对视频的爬取,加载到本地的视频不需要解码
1 python的编码和解码
编码:str.encode("编码方式")
解码:byte.decode("解码方式")
代码演示:
s = "i am 依彡"# 编码方法
ret1 = s.encode("utf-8")
ret2 = s.encode("GBK")
ret3 = s.encode() # 不写规则,默认为utf-8# 解码方法,字节数据对象.decode("规则")
print(ret1.decode("utf-8"))
print(ret2.decode("GBK"))
print(ret3.decode()) # 不写规则,默认为utf-8
2 文件操作
文件操作本质上也是编码与解码
with操作文件可以自动打开关闭文件
文件操作的四种方式:
读:r
写:w
读字节:rb
写字节:wb
代码演示:
# 写文件——编码
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt",mode="w",encoding="utf8",
) as f:f.write("我爱兰州")# 读文件——解码
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt",mode="r",encoding="utf8",
) as f:print(f.read())# 读字节
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt", mode="rb") as f:print(f.read().decode())# 写字节
with open("第一阶段-爬虫\\JS逆向\\4-编码与requests模块\\编码\\my.txt", mode="wb") as f:f.write("我爱甘肃".encode())
二、requests模块
requests模块是Python中首选的HTTP请求库,易用性很强,可以完成各种类型的HTTP请求。
安装:pip install requests
1 requests支持的方法
requests模块支持的请求
请求 | 作用 |
---|---|
get | 发送一个GET请求,用于请求页面信息 |
post | 发送一个POST请求,通过body向指定资源提交用户数据 |
put | 发送一个PUT请求,向指定资源上传最新内容 |
delete | 发送一个DELETE请求,向指定资源发送一个删除请求 |
head | 发送一个HEAD请求,类似GET请求,但只请求页面响应头信息 |
options | 发送一个OPTIONS请求,用于检查服务端相关信息 |
使用方法:requests.get("url",..请求) 获得一个Response对象,可以从里面提取需要的内容 response.status_code 状态码
response.headers 响应头
response.text 响应体
response.json response.encoding 推荐编码
response.content 字节数据
2 get请求
requests的请求参数:
headers:模拟请求头的信息,字典{"User-Agent":"", "Referer":""}
params:查询参数,ajax请求等一些情况会使用,链接在'?'后携带参数就使用params
优点:更加规范,便于维护data:用作post请求,里面存放请求体数据
3 反爬
UA、Referer和Cookie三者都是headers的参数
UA反爬
UA反爬:看发送请求的客户端是否有User-Agent头
Referer反爬
Referer反爬:模拟来源使其更像正常访问,比如直接输入链接进入和从搜索跳转进入不一样
Cookie反爬
Cookie反爬:模拟登录获取动态cookie,携带cookie爬取数据 cookie参数可以写在headers中,也可以直接写在请求(get/post)中。
res = requests.post(data={}):.post方法使用data参数传入用户名密码
res.cookie获取响应cookie,使用dict()强转为字典 再将cookie传入requests.get()的cookie爬取数据
代理IP反爬
代理IP反爬:爬虫频率过高可能被服务器拉入黑名单,禁IP
.get中的proxies={"协议": "ip"}参数,可以购买ip池使用
可以对httpbin.org/(get)发送(get)请求查看自己的请求信息,也可以post、ip,可以用来测试代理ip
雪球网数据抓取
import requestsurl = "https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0","Referer": "https://xueqiu.com/","cookie": "xq_a_token=c2aefa380b9072a563e961143570e259329d659f; xqat=c2aefa380b9072a563e961143570e259329d659f; xq_r_token=2823a23fcab28b5723fbd7c5220a4ba4cc755a52; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcxODg0NDcxMiwiY3RtIjoxNzE3NTA5ODQ0NTMwLCJjaWQiOiJkOWQwbjRBWnVwIn0.RWM2X-UAH7S595-rOPPhmdLGMfTslJtHmFzs3MevL6IFmR99BEcG5aHNbC-X-XzKashbkRizAa51zNK4Eqva-EfsRr4KOx8dn-oKPS_VqEgqBlYYBDGbsjPNNz3uVIpPQH_QWXkz9Dsup8XaMloskNle6v2J6FS69Hhciq3QLZ58grLXOE4q2EH000bNRU7-0IJ7XQ9iAAe80-acUI-EAAThQXTZqupwz5gZ1SZCD2-WiqloH8Y2L6H1ACI8hZQpBOYVOqIp_097DKczrYXJfgm9Aq1Ktrs0gP3etvLYnKfgcxFfN_i1CtK6WjyfD10Ho108G1dfnZXkf9aiPDupsg; cookiesu=411717509851884; u=411717509851884; device_id=d5e0c443eea36ebfa394fe87f641040e; Hm_lvt_1db88642e346389874251b5a1eded6e3=1717509858; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1717509858"
}res = requests.get(url, headers=headers)
print(res.text)
4 session对象
session对应session方法,用于维护cookie,尤其是cookie是可变的
session = requests.session()
之后可以使用session对象替换requests对象
session.get()/session.post()
5 图片和视频爬取
图片和视频爬取不需要解码,使用wb直接保存
图片爬取
import requestsres = requests.get("https://tse3-mm.cn.bing.net/th/id/OIP-C.GC_ugX-TzPVR26SSxI1kZwHaE9?rs=1&pid=ImgDetMain")with open("第一阶段-爬虫/JS逆向/4-编码与requests模块/requests/图片.jpg", mode="wb") as f:f.write(res.content)
视频爬取
import requestsres = requests.get("https://v6.huanqiucdn.cn/4394989evodtranscq1500012236/f837acc11253642697943075111/v.f100830.mp4")with open("第一阶段-爬虫/JS逆向/4-编码与requests模块/requests/视频.mp4", mode="wb") as f:f.write(res.content)