大众点评店铺信息爬虫
花式反反爬之抓取大众点评店铺信息。
项目地址
Gitee:https://gitee.com/Tooi/dianping
项目目录
│ config.py
│ dianping.py
│ parse.py
│ proxy.py
│ README.md
│ requirements.txt
│
├─utils
│ common.py
│ ua.log
│ __init__.py
│
└─view
analysis*.png
db.png
环境依赖
pip3 install -r requirements.txt
抓取流程
美食店铺首页开始,遍历抓取每页内容。
for i in range(50):
print("第%d页:" %(i+1))
response = self.get_store_list_page(INIT_URL.format(str(i+1)))
self.parse_data(response)
time.sleep(eval('%.1f'%random.random()))
# 测试仅抓取第一页
break
花式反爬
大众点评的反爬措施很强,可以 ban 掉大部分爬虫。当然,误伤率也比较高。测试期间发现的反爬措施有:
- 常规链接 404(店铺详情页链接 404 页面)
- 请求头校验
- 多类型字体反爬(偏移量,自定义 css)
- 验证码(常规四字中英文混合)
- cookies
- ban ip
例如,当我用 Postman 测试链接时发现,若不用 UA 则返回 403,要求输入验证码方可正常访问。而大众点评总的来说还是基于 IP 检测,所以,爬虫的重点在于:代理 IP 的质量。
反反爬
- 挂代理(加强型爬虫代理)
- Headers 添加随机 UA 和 Refer 参数
- 随机抓取时延
注意:
- 加强型爬虫代理非一般隧道或 API 类型代理 IP,成活率较高
- 原始 headers 中没有 Refer 参数,测试发现,添加 Refer 参数可提高请求头伪装效率
解释说明
- 为测试方便,未实现自动获取 css、svg_font、svg_num 等链接,请自行复制(测试期间每间隔一天变化一次)
- 未处理数字、文字拼接逻辑。例如:页面要处理的数字为 1081 中的 1、0、1,实际结果可能为 8101(日后再更)
- config.py 中的所有代理均已失效或涂改,需要自己更换
运行
命令行切换至根目录:
>>> python dianping.py
抓取结果
公告
本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及点评网侵权,请邮箱联系,会尽快处理。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于