requests库爬取(post请求)拉勾网,并存入json文件

requests爬取拉钩网

首先还是老样子,打开拉勾网的网址,先进行一波分析
在这里插入图片描述
查看网页源代码搜索,第一个职位名称大数据开发工程师,发现不在源码里
这时我们就要利用开发者工具在找接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找到接口发现数据都存在该接口里,且发现请求为post请求,请求所需要data也找到了,大概可以猜测pn就是这个职位的页数,所以我们的翻页操作就可以靠改变pn的值来实现,kd就是我们搜索的职位,我们可以通过改变它的值从而达到搜索其他职位信息的操作。
明确目标之后我们就可以来写代码了:
完整代码如下:

import requests
import json
#拉勾网的反爬需要验证cookie,所以我们通过Session来获取cookie,
#如果不加cookie的话会获取不到数据
def getCookie(starturl,headers):
    s = requests.Session()
    s.get(starturl, headers=headers)
    cookie = s.cookies
    return cookie
def List_get(list):
    text = ''
    for j in list:
        text += j
    return text
def wirte_data(i,text1,text2):
    with open('D:\\files\\lagou.json', 'a', encoding='utf-8') as f:
        stra = i['positionName'] + '·' + i['salary'] + '·' + i['city'] + '·' + i['companyFullName'] + '·' + i[
            'workYear'] + '·' + i['education'] + '·' + i['industryField'] + '·' + i['companySize'] + '·' + i[
                   'financeStage'] + '·' + text1 + '·' + text2
         #存json文件只需要把要存入的数据dump一下就好了
        json.dump(stra,f,ensure_ascii=False)
        f.write('\n')
def get_data(starturl,url,headers,k,title):
    cookie = getCookie(starturl, headers)
    data = {
        'first': 'true',
        'pn': str(k),
        'kd': title,
        'sid': '7da6249276fc4a718625d2d2d1b3b6f7'
    }
    if k%10==0:
        cookie=getCookie(starturl,headers)
        req = requests.post(url, data, headers=headers, cookies=cookie)
        html = json.loads(req.text)
    else:
        req = requests.post(url, data, headers=headers, cookies=cookie)
        html = json.loads(req.text)
    return html
def main(title,page):
    starturl = 'https://www.lagou.com/jobs/list_%E5%A4%A7%E6%95%B0%E6%8D%AE/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='
    url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    headers = {
        'accept': 'application/json, text/javascript, */*; q=0.01',
        'referer': 'https://www.lagou.com/jobs/list_%E5%A4%A7%E6%95%B0%E6%8D%AE/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
    }

    for k in range(1,page+1):
        html=get_data(starturl,url,headers,k,title)
        for i in html['content']['positionResult']['result']:
            txt1 = List_get(i['companyLabelList'])
            txt2 = List_get(i['skillLables'])
            wirte_data(i,txt1,txt2)
        print('==' * 20, '第{}页已爬取完成'.format(k), '==' * 20)
if __name__ == '__main__':
    while True:
        title=input('请输入职位名称:')
        page=int(input('请输入获取页数:'))
        main(title,page)

注:本文章仅供参考学习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值