接口实现拉钩爬虫

本文介绍了如何分析和爬取拉勾网上的Python职位信息。首先通过网页分析找到AJAX接口,接着设计请求头,确保包括必要的cookie和referer信息以避免反爬策略。然后获取接口URL并解析JSON数据,提取职位ID以构造详细页面URL。在详细页面中,直接解析网页源代码获取所需数据。最后,文章提到在实际爬取过程中可能出现的cookie失效问题,建议使用cookie池或切换到selenium进行爬取。
摘要由CSDN通过智能技术生成

拉勾网是个反爬措施比较多的网站,其中有许多需要我们调试分析学习的地方,本章就以拉钩网上遇见的问题进行分析,然后进行爬虫设计。

1. 网页分析

打开网页链接(这里我是用python关键字搜索的):
https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=

之后查看网页源代码,搜索岗位信息(Ctrl+f),发现我们所需的数据不在网页源代码中出现,而是通过ajax接口把数据传递过来的。拉钩网是一个典型的用ajax来写的网站。
分析网页查找传递数据的接口
在这里插入图片描述之后查看网页的数据头信息:
在这里插入图片描述

2. 请求设计

从中我们可以知道请求的方式,请求的url,cookie,referer,data信息等,从而构建我们的请求头数据。之前我们在构建请求头的时候,有时候会习惯的只传递cookie,user-agent信息,然后会报错:{“status”:false,“msg”:“您操作太频繁,请稍后再访问”,“clientIp”:“113.94.81.141”},这倒不是操作频繁,而是检测到爬虫了,这是请求头信息不完善的问题,这里拉勾网还会检测Referer信息,如果没有的话,就会被检测到。
从这的学习,我们知道了有些网页的反爬的一种措施,之后可以注意一下,然后在不确定的时候可以采用笨的方法,请求头的数据全部传递。请求头的信息设计如下:

#此处需要设置Cookie,User-Agent,Referer,Accept(可以不设置),不然报操作频繁错误
urls = 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
           'Referer':'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
           'Accept':'application/json, text/javascript, */*; q=0.01'
           }
data = {
   
    'first': 'false',
    'pn':'1',
    'kd': 'python'
}
#使用Session方法获取搜索页的cookie
s=requests.Session()
s.get(urls,headers=headers,timeout=3)
cookie = s.cookies

3. 获取url信息

在接口处查找提取我们所需的信息,检测找到的接口是否正确,然后通过分析,数据已json的格式存在preview。当然也可以将response中的数据复制粘贴在json.cn中,将传递的json数据格式化,进一步分析。
在这里插入图片描述

怎么获取数据呢? 我们可以通过获取返回的json内容,通过json的内容找到我们想要的数据,每个职位都有其详细信息的列表,我们这一步就是要获取其详细信息的列表,每个职位都有其固定的id信息,通过获取id信息,我们就可以拼凑出其url链接,实现代码如下:

def get_list_page():
    # response = requests.post(url=url,headers=headers,data=data,cookies=cookie,timeout= 3)
    # #json方法,如果返回的是json数据,那么这个方法可以直接load成字典
    # print(response.json())
    for x in range(10):
        data['pn']=x
        response 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值