1、不同访问环境,得到的数据可能不同
有些网站会根据访问者的性能状况,返回不同的数据,特别是有加密的数据,可能会在低配设备上省去加密。因此,可以尝试切换不同的环境访问数据源,降低爬取难度。
信息加密、解密是比较耗费性能的行为,在一些低端设备上可能造成极差的用户体验,网站为了让更多用户可以访问,有可能放弃低端设备上的加密。
- PC上拿不到的数据,尝试在手机上获取;反之亦然
- 高配设备取不到数据,尝试用低配设备获取
- 通过修改User-Agent,伪造自己的设备信息(浏览器、设备)
- FireFox开发者工具自带了设备模拟器,且可以修改AU信息
FireFox设备模拟器
2、FireFox中JS调试工具
格式化源代码
在JS页签上右键选择【美化源代码】可以将压缩后的JS代码格式化,使其稍微具有可读性
断点网址请求
XHR断点处添加要拦截的地址。
添加拦截后刷新页面,JS执行到发送请求的地方,会自动触发断点。
3、httpx重定向请求时,添加cookie
with httpx.AsyncClient() as client:
async def add_cookie(req):
# 在header中设置cookie
req.headers['Cookie'] = cookie
# 设置request的hook
client.event_hooks = {
"request": [add_cookie]
}
rsp = await client.get(url, headers=header, follow_redirects=True)
- httpx在处理重定向时,不会把原始请求的cookie复制给重定向的请求(所以,有时候虽然做了重定向,却拿不到想要的内容)
- 通过event_hooks机制,可以在重定向的请求发送前,将正确的cookie设置的请求头中。这样可以正确取到重定向后的内容。
- 新版本httpx的event_hooks需要实现为异步函数,否则使用时会报错(这一点,连官方文档都没更新,照着文档搬的代码跑不通)
4、Unicode标准化
from unicodedata import normalize
unicodedata.normalize ——Unicode文本标准化
5、浏览器查看重定向的请求过程
勾选持续记录
FireFox持续记录
6、jsonpath库 (XPath for JSON)
pip install jsonpath2
7、网站禁用开发者工具(F12)&右键
禁用右键
禁用F12
- 用快捷键
Ctrl + Shift + I打开开发者工具
打开后,会遇到debugger阻断调试 -
在Chrome、Edge中可以”不在此处暂停“,Firefox无效
Edge跳过debugger
8、中间人代理工具:mitmproxy
安装:pip install mitmproxy
启动代理:mitmdump -s myproxy.py
代理脚本可用接口:https://docs.mitmproxy.org/stable/api/events.html#HTTPEvents
证书安装:启动代理后,浏览器访问mitm.it选择自己需要的证书
# myproxy.py
# 示例,修改返回内容
from mitmproxy import HTTPFlow
def response(flow: HTTPFlow):
if flow.request.url == "https://www.baidu.com/":
flow.response.text = "拦截了百度"









网友评论