利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库

一、目标站点分析
目标url:https://www.lagou.com/jobs/list_%E7%88%AC%E8%99%AB?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=
首先我们打开上述url,进入拉勾网爬虫招聘首页,看看是什么情况。
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第1张图片
由于拉勾网的加载使用ajax动态加载的,也就是说,我们直接请求这个网页的url是抓取不到具体职位的url的,但是拉勾网是怎么给我们返回具体职位的url的呢?我们按下F12进行分析。
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第2张图片
这里有三个点需要注意:
1.POST请求,说明拉勾网是通过框框里面的url请求了他们的后台接口,给我们返回的数据,所以,我们就可以模拟发送这个url去请求,理应可以获取我们想要的数据;
2.Json文件格式;
3.我们把响应复制放到这里写链接内容去格式化,这样就更加清楚返回的是什么内容。
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第3张图片
我们可以看到有一个PositionID的字段很显眼,再仔细一看,对应的是一个招聘公司,我们回去爬虫页面,再点开这个url对比一下,发现这就是我们需要找的重要信息,我们可以把每个PositionID抓取下来,拼凑成url队列,给requests请求,就可以了!
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第4张图片
需要注意的有两点:
1.我们需要POST一个data过去,这样才能请求获得响应;
2.我们需要设置一个Referer,不然的话拉勾网会返回”您的操作太频繁”,这是由于没有加Referer的原因。
二、核心代码解读
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第5张图片
该部分是用于抓取page_url:先抓取10页的page_url,是试一试效果,还需要加入时间停顿,防止抓取过快,最后抓取positionId,再拼凑url,放入队列中。
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第6张图片
该部分是解析想要的数据:如果队列没有请求的position_url,为空,那么就停止解析,跳出循环,下面的就是具体数据解析和清除干扰的tag标签了。
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第7张图片
这里是把每一个职位的信息放到一个列表套元组中,然后for循环遍历,最后一个一个的写入数据库。
利用request库和队列动态ip抓取拉勾网的python爬虫职位,并且写入MySQL数据库_第8张图片
这里是从数据库随机选择ip,加了无效ip判断机制。
这里写图片描述
这里是借助scrapy.item的源码的方法,对抓回来的数据进行标签清洗的。
三、源码分享
github源码
四、题外话
爬虫需要学习的东西很多,我还得不断地去学习,大家一起加油~

你可能感兴趣的:(爬虫)