Python 爬虫拉勾网工作岗位
第一次用python进行爬虫,一开始怎么爬都没有数据,后来才知道,网上很多博客针对的是静态网址,而现在基本这种招聘网站都采用了动态加载的方法,经过一周的时间,百度加不停的改bug,终于爬出来了。在这里记录一下,也分享给大家。欢迎大家批评指正。
第一步:
1.先去拉钩网站:职位输入:python后网址:网址
2.右击上述图片的空白处,选择“审查元素”,会出现如下界面,选择1处“Network”,保证2处红色圆点亮,然后点击图(1)中刷新,就会发现原本空白的Network下面有了很多内容。
3.挨个选择并查看上述抓包的内容,前提:选择Preview下查看内容
最后找到我想要的抓包内容,页面如下:
4.基于上述的操作中,查看此时的Headers,找到:
General下:Request URL对应内容
Request Headers下:accept、referer和user-agent对应的内容
(备程序使用)
第二步:程序调用
1.修改程序查找调用内容
def main():
#选择地址和职位信息后,浏览器页面的网址
url_start = "https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
#抓包后的url
url_parse = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false"
#抓包后的内容信息
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
}
url_start内容就是上述图(1)中的网址,url_parse是抓包后的Request URL对应的内容。其他三个内容,找到上述抓包的内容进行替换。
还要修改页数:对应查看一看,自己加载出来职位共多少页:
for x in range(1,23): #23就是总页数,可根据实际修改
data = {
'first': 'true',
'pn': str(x),
'kd': 'python'
}
完整代码:
import requests
import time
import json
import xlwt
def main():
#选择地址和职位信息后,浏览器页面的网址
url_start = "https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
#抓包后的url
url_parse = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false"
#抓包后的内容信息
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
}
for x in range(1,23):#23就是总页数,可根据实际修改
data = {
'first': 'true',
'pn': str(x),
'kd': 'python'
}
s = requests.Session()
s.get(url_start, headers=headers, timeout=3) # 请求首页获取cookies
cookie = s.cookies # 为此次获取的cookies
response = s.post(url_parse, data=data, headers=headers, cookies=cookie, timeout=3) # 获取此次文本
time.sleep(5)
response.encoding = response.apparent_encoding
text = json.loads(response.text)
info = text["content"]["positionResult"]["result"]
for i in info:
companyFullName