《爬虫实战课》学习记录

2023-04-05  本文已影响0人  _Walker__

1、不同访问环境,得到的数据可能不同

  有些网站会根据访问者的性能状况,返回不同的数据,特别是有加密的数据,可能会在低配设备上省去加密。因此,可以尝试切换不同的环境访问数据源,降低爬取难度。
  信息加密、解密是比较耗费性能的行为,在一些低端设备上可能造成极差的用户体验,网站为了让更多用户可以访问,有可能放弃低端设备上的加密。

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)

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 = "拦截了百度"
上一篇 下一篇

猜你喜欢

热点阅读