首先, 拉勾网是一个典型的难以爬取信息的网站。是因为此网站包含robot协议,获取爬取请求做限制。导致无法顺利爬虫。
另外,职位信息是Ajax文件加载进来的,单纯了通过源码获取不到信息。
下面就开始对网站进行分析:
1.随意搜索一个职位,比如我搜索Python,下面对应出来很多Python的职位信息。。
比如:第一个Python的职位叫“Python开发工程师”,此时我们右键查看源码,搜索“Python开发工程师”,却不能找到这个信息
通过F12,在Network下筛选出XHR响应(可以筛选出Ajax请求响应)
打开后发现response中有我们要找的数据(所以可以判断这个网页就是通过Ajax加载的)
当我们这样编写代码的时候发现打印出来的信息很少很少,也就是一些信息获取不到
from urllib import request,parse
url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
resp=request.urlopen(url)
print(resp.read())
所以,解决这个问题的办法就是修改headers来伪装普通用户访问网页
复制Request Headers中的内容:
为了伪装的更像是普通用户,我们也把Headers中的“Referer”复制下来,放进我们自定义的Headers里面
要想发送post请求,我们必须构造Form Data数据:这里我们可以直接将网页中的“Form Data”拿过来进行构造
具体代码如下:
from urllib import request,parse
url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
#resp = request.urlopen(url)
#print(resp.read())
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.27 Safari/537.36',
'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
}
data={
'first': 'true',
'pn': 1,
'kd': 'python'
}
req=request.Request(url,headers=headers,
data=parse.urlencode(data).encode('utf-8'),method='POST')
resp=request.urlopen(req)
print(resp.read().decode('utf-8'))