美文网首页
《爬虫实战课》学习记录

《爬虫实战课》学习记录

作者: _Walker__ | 来源:发表于2023-04-05 05:39 被阅读0次

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
  1. 用快捷键Ctrl + Shift + I打开开发者工具
    打开后,会遇到debugger阻断调试
  2. 在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 = "拦截了百度"

相关文章

网友评论

      本文标题:《爬虫实战课》学习记录

      本文链接:https://www.haomeiwen.com/subject/brztqdtx.html