这几天学习了 python 爬虫的入门知识,也遇到很多坑,开个贴记录一下
基本原理
Python 爬虫基本要具备以下功能:(参考此回答)
- 向服务器发送请求,服务器响应你的请求。(你可能需要了解:网页的基本知识)
- 从抓取到的网页中提取出需要的数据。(你可能需要了解:正则表达式、Beautifulsoup)
保存数据并继续爬取下一个网站。
当然,有以上功能还是不够的,你还需要与网站反爬策略斗智斗勇:(参考此回答)
- 构造合理的HTTP请求头
- 设置cookie
- 正常的时间访问路径
- 注意隐含输入字段值
- 避开蜜罐
- 使用远程服务器来避免IP封锁
当然以上我还不怎么会。
项目实践
可以通过以下2个项目练手
豆瓣电影TOP250
这个项目比较容易,代码复制过来,大概理解代码的意思,然后跑的过程也比较顺利。
话不多说,我们开始吧
爬取拉勾网实战
借用一下@ _知几 的图,按 F12 查看页面源码,在 NETWORK 标签中可以分析网站的请求响应过程,这里看到 NETWORK 标签下 TYPE XHR 里有 companyAjax.json 和 positionAjax.json (开始我死活找不到positionAjax.json,后来发现是我没选工作地点),我们所需求的数据可以从中提取出来。
以下代码是我在 _知己 的代码基础上修改得到的
修改了以下几处:
- 由原来的 python 2 改为 python 3
- 导入 fake_useragent 模块,可以随机伪造请求头(使用前需 pip install fake-useragent)
- 读取 companyAjax.json 而不是原来的 positionAjax.json
几点说明:
- ua.random 用于生成随机请求头
- get_json 函数中的 my_headers、 cookies、 content 等,都可以在浏览器 F12 控制台中找到
- 目前爬取了几页后就被发现,显示 {‘success’: False, ‘msg’: ‘您操作太频繁,请稍后再访问’, ‘clientIp’: ‘202. ‘},暂时还没有解决办法。
|
|