【第二天】自学python:Http通过GET获取数据的爬取练习

大城市里の小女人 提交于 2019-12-04 06:11:30

这篇文章本来是昨天要发的,主要是昨天写的拉勾网数据抓取的时候出现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爬虫小案例,感觉需要学习的地方还是非常的多,需要不断的学习,不断的总结,提升自己。

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!