本文从爬取拉勾网的数据开始,会结合后期的文章逐步完善python学习中的各种应用,包括爬虫、数据分析、自动化测试等(目前不考虑web)。希望有兴趣的同学一起多多交流。
读到此时,已默认电脑安装了python3.+ 。
一、环境:
python3.+
在IDLE中(pycharm也可)
二、目标:
爬取拉勾网的python相关职位信息。
三、思路:
当准备爬取某网站数据时,应明确一下思路,爬虫是使用程序模拟人的浏览器操作获取数据的过程。所有的操作都是围绕着请求与响应。
四、步骤:
1、打开拉勾网,在搜索框中输入python,如图:
image.png
红框中的每一行就是一个个的项目信息,我们就是要爬取这些信息。
2、打开命令行,输入 pip install requests 安装requests库,用于网络请求
image.png
在进入网页的时候,有人会使用Get方式请求,并将当前的网页直接作为目标url,会直接被服务器给pass掉,因为真实的浏览器在访问时一定会带有一些参数的,故而在请求方式与参数都不正确的情况下,服务器自然判定为爬虫,不会返回正确的数据。
3、此时,可按F12查看当前网页中的NetWork项,一般的前端在请求数据的过程,都是先请求个大的网页框架,然后在容器中进一步发送请求,才能获得容器内部的数据,一般会采用Ajax请求,所以可以点击XHR,找到其中的positionAjax查看真实的url、headers以及formData此三项。
如图:
image.png
那么如何爬取呢?
打开python的IDLE:
按下Ctil + N进入编辑模式
注意:
使用IDEL需要先保存,再按F5运行。
为了更好的模仿浏览器去请求数据,在请求一次网页之后,我们给爬虫随机休眠一段时间。
我们所需要的数据就在上图中的Preview(Headers右边)中,如下图。
虽然不是很清晰,但应该不影响阅读
所写爬虫代码如下:
#coding:gbk
import requests #导入网络请求库
import random #导入随机数库
#这才是真实的url
url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'
#请求头中的这些参数一般被用来做反爬的判断依据,每个人的User-Agent是不一样的
the_headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'Host':'www.lagou.com',
'X-Anit-Forge-Code':'0',
'X-Anit-Forge-Token':None,
'X-Requested-With':'XMLHttpRequest'
}
#循环爬取30页的数据
for pages in range(1,31):
#post请求中要带上一些参数
the_data = {
'first':'true',
'pn':pages,
'kd':'python'
}
#向服务器请求数据
result = requests.post(url, headers = the_headers, data = the_data)
jsonResult = result.json()
#我们想要的数据内容就从下面的关键字中一个层级一个层级的向下找
json_result = jsonResult['content']['positionResult']['result']
print(json_result)
#为了模拟真实的浏览器操作,需要不定时休眠
random.randint(20,36)
print('所有页面爬取成功')
结果:
image.png如上图所示,已经爬取了很多页了,但是后面几页还是出了问题,问题在于休眠的时间设置的不够长,还是被服务器判别出了爬虫,因此不进行响应,只需要在休眠时间上放的更久即可,本程序中使用的休眠时间是20秒到36秒,可以尝试40秒到60.
结束。
网友评论