#coding:utf-8
import requests
import csv
import time
# 爬取链接
url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E&needAddtionalResult=false'
# 头部信息
headers = {
'Accept' : 'application/json, text/javascript, */*; q=0.01',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
'Referer' : 'https://www.lagou.com/jobs/list_web%E5%89%8D%E7%AB%AF/p-city_213?&cl=false&fromSearch=true&labelWords=sug&suginput=web'
}
#页码
Form_data = {
'first' : 'true',
'pn' : 1,
'kd' : 'web前端'
}
# 创建会话获取cookie 并且cookie要用在该会话中
s = requests.session()
url_list = 'https://www.lagou.com/jobs/list_web%E5%89%8D%E7%AB%AF/p-city_213?&cl=false&fromSearch=true&labelWords=sug&suginput=web'
s.get(url_list,headers=headers)
cookie = s.cookies
# 传入参数 页码
# 输出 该页爬取到的数据
def get(page):
Form_data['pn'] = page
response = s.post(url,headers=headers,cookies=cookie,data=Form_data,timeout=3)
job_list = response.json()
job_result = job_list["content"]['positionResult']
csv_data = []
for k in range(0,job_result['resultSize']):
job_info = []
i = job_result['result'][k]
job_info.append(i['positionName']) # 职位
job_info.append(i['companyShortName']) # 公司
job_info.append(i['salary']) # 薪资
job_info.append(i['education']) # 学历
job_info.append(i['district']) # 位置
job_info.append(i['workYear']) # 工作经验要求
job_info.append(i['positionAdvantage']) # 福利待遇
csv_data.append(job_info)
#数据保存到csv文件中
csvfile = open('软件职业.csv', 'a+',encoding='utf-8-sig',newline='')
writer = csv.writer(csvfile)
writer.writerows(csv_data)
csvfile.close()
return csv_data
if __name__ == '__main__':
a = [('职位','公司','薪资','学历','位置','工作经验要求','福利待遇')]
csvfile = open('软件职业.csv', 'a+',encoding='utf-8-sig',newline='')
writer = csv.writer(csvfile)
writer.writerows(a)
csvfile.close()
all_compay = []
# 爬取30页
for page_num in range(1, 31):
result = get(page=page_num)
all_compay += result
print('已抓取{}页, 总职位数:{}'.format(page_num, len(all_compay)))
time.sleep(20) #爬虫请求频率太高容易被封ip
爬取链接:https://www.lagou.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E&needAddtionalResult=false
爬虫要点:
1、找请求:
2、找请求中的重要信息
你做到这一步会发现在postman模拟请求失败,显示超时
这是什么情况呢?
因为这个拉勾网做的是session请求,所以他的cookie需要对应他的会话session。
所以需要自己创建session会话去获取cookie!!!
参考:爬取拉勾网职业信息