python爬虫之JS逆向——requests模块

目录

一、编码与解码

 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 requests

url = "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 requests

res = 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 requests

res = 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)
  • 32
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值