前言

近期因项目需要, 试着抓取几个网站的书籍信息

  • 豆瓣
  • 亚马逊

豆瓣

豆瓣反爬虫策略 web, 使用ip池, 每次可以拿到400+页面

豆瓣 APP

ChatGPT: https://chatgpt.com/share/69797f50-c014-8001-b62d-61d3b23f467d

直接安装 mitmproxy 证书, 无效, 豆瓣server 不信任证书 需要使用 Frida / Objection 绕过 Pinning Frida 做的事:“不管你怎么校验证书,我都帮你返回 true” Frida = 底座 Objection = 懒人模式

1
2
3
4
5
frida-ps -U |grep douban
  com.douban.frodo:pushservice

# 注入脚本, 未使用
frida -U -f com.douban.frodo -l bypass_ssl.js

安卓模拟器: Android Studio more action, 仅使用模拟器, 不创建应用

pixel 5 Android 11 no google api

douban app 7.13.0 https://apkpure.com/cn/%E8%B1%86%E7%93%A3/com.douban.frodo/download/7.13.0

推送到模拟器

1
adb push ~/Downloads/frida-server-17.6.2-android-arm64 /data/local/tmp/

adb root 模式下

1
2
3
# 检验
id
uid=0(root)

下载 frida-server (17.4.4) 17.6 会出现 abort

1
2
3
4
5
6
7
8
9
adb push ~/Downloads/frida-server-17.4.4-android-arm64 /data/local/tmp/frida-server

# 进入系统运行它
adb shell
cd /data/local/tmp/
./frida-server

# 检查是否运行
adb shell ps | grep frida
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# python3.12 
source ~/env312/bin/activate

# # objection==1.12.3
# frida==17.4.0
# frida-tools==14.5.1
# 可能需要 ideviceimagemounter
objection -g com.douban.frodo explore --startup-command "android sslpinning disable"

# 以上命令, 改进的参数版本
# objection --name com.douban.frodo start --startup-command "android sslpinning disable"

mitmproxy

运行 mitmweb

设置代理: adb shell settings put global http_proxy 192.168.1.250:8080

从 mitmproxy 中分析请求参数和返回信息, 构建python脚本

亚马逊

亚马逊反爬虫策略 使用 playwrite, 一次抓取 100+ 没什么问题

运行在树莓派中

1
2
3
4
5
sudo apt install tmux
pip install jupyterlab pandas requests
# 用于管理目录之类
# hostname pi.local:8888, Safari 可以访问
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser

树莓派3 功耗, 中等负载 3.5–4.5 W, 一晚上, 5 W × 8 h = 40 Wh = 0.04 度电(kWh), 0.04 × 0.5(昆明电价) ≈ 0.02 元, 2分钱