这篇文章本来是昨天要发的,主要是昨天写的拉勾网数据抓取的时候出现IP被标记了,我这边对IP代理还不是很熟悉,所以页也没发抓取拉勾网的数据练习。
今天的话我对比了拉勾网和BOSS直聘这两个网站,职位的请求数据方式不一样,拉勾网采用是jquery的ajax的POS请求方式,而BOSS直聘采用的是http的GET请求方式。
数据获取方式不同,我们抓取的方式也不同。
我们来看看BOSS直聘的简单采集
今天目的:抓取BOSS直聘搜索python的职位的数据。
我们打开网址:https://www.zhipin.com/ 搜索python
第一步:打开F12模式,查看调试工具
找到你们访问的cookie、tooken来
定义好头部参数,请求需要用到
第二步:分析链接
https://www.zhipin.com/c101280100/?query=python&page=1&ka=page-1
https://www.zhipin.com/c101280100/?query=python&page=2&ka=page-2
这个是分页链接,但是我也很奇怪,搜索python,只能分10页,我觉得应该BOSS对数据进行处理,不让搜索出来。这个有点不解
通过代码将分页链接进行规范化,我传10页,就会将10页的链接生成好,保存到集合中去。
第三步:解析一个页面链接的数据
请求的时候需要带上头部数据,不然请求不出来。
result = r.content.decode('utf-8')我们网页的数据格式是UTF-8,使用GET方式的时候打印出来是乱码,必须需要转码。第四步:获取多页数据
获取所有链接,调用每页获取的参数,抓取数据,保存到集合
获取第一页没有问题,获取第二页就出现正在加载中,出现异常。后面我加了一个线程休眠的状态,请求了几页还是出现这个加载中的问题。待处理
多线程爬虫还是有必要研究一下第五步:保存到mongoDb数据库
我刚开始的想法是:先创建一个数据库,调用接口爬取数据,获取所有的数据,再来保存到数据库,发现采集到2页就不行了,这个逻辑有点问题。
正确的做法:应该将每一页数据保存到数据库,或者每一条数据,就插入到数据库,确保插入安全。今天写完BOSS直聘的爬虫小案例,也发现了不少的问题,我总结一下1、cookie需要不停的重新获取,过几分钟就使用不了,需要重新复制过来。2、IP调用爬虫一下就被标记了,需要用IP代理来做分布式爬取3、请求访问的频繁处理,单纯的用线程休眠来做不合适,解决不了根本性问题4、存储到数据库的逻辑不合理,对异常处理没有概念。今天自学了一下python爬虫小案例,感觉需要学习的地方还是非常的多,需要不断的学习,不断的总结,提升自己。