赞
踩
需求:
通过python抓取拉钩网的招聘详情,python岗位要求。
- 拉钩网项目与前面爬虫项目的不同点:
之前项目是get请求,拉钩网项目是post请求。
get是要获取这个信息,post是获取这个信息的同时,在上传一部分参数。
在爬取三国演义小说时,我们是先爬取目录页内容,得到章节名和详情页链接;再通过分析去访问详情页链接获取详情页内容。
但在拉钩网项目中,原html代码中是找不到详情页链接的,此时我们需要通过分析XHR
对象来获取需求。
- 页面分析:
进入拉钩网官网,输入python出现所有相关的职位,点击每一个职位进去分析每个职位详情页的网址特点。
通过观察可以发现,拉勾网的职位页面详情是由 http://www.lagou.com/jobs/ PositionId.html
组成。
而 PositionId 可以通过分析 Json 的 XHR 获得。
知道了数据的源头,接下来就按照常规步骤包装 Headers ,提交 FormData 来获取反馈数据。
注意:
XHR
: XMLHttpRequest对象
用于和服务器交换数据。当我们进入开发者模式,点击网络,XHR获取响应后
这个请求里面包含了
真实的URL( 浏览器上的 URL 并没有职位数据,查看源代码就可以发现这一点)、
POST 请求的请求头Headers 、
POST 请求提交的表单 Form Data (这里面包含了页面信息 pn 、搜索的职位信息 kd )
真实的URL获取:
请求头信息
我们需要构造的请求头Headers信息,如果这里没有构造好的话,容易被网站识别为爬虫,从而拒绝访问请求。
表单信息
发送POST
请求时需要包含的表单信息 Form Data
。
返回的JSON数据
发现需要的职位信息在 content –> positionResult –> result 下,其中包含了工作地点、公司名、职位等信息。 我们只需要保存这个数据就可以了。
1.先获取拉钩网所有岗位API接口的响应信息(response)
通过post并传入参数和数据访问url:https://www.lagou.com/jobs/positionAjax.json?=false
2.在获取的页面解析我们需要的所有岗位的ID号,yeild返回。
3.把ID传进解析岗位详情的函数里,先下载岗位详情页面,然后解析我们想要的岗位要求信息。
import time import requests from fake_useragent import UserAgent from lxml import etree ua = UserAgent() def download_positions(kd="python", city="西安", page=1): """ 获取拉勾网所有的岗位API接口的响应信息 :param kd: 岗位名称/关键字 :param city: 城市 :param page: 页码 :return: position_id """ # 拉勾网访问的网址,并不是Ajax的网址 # old_url = 'https://www.lagou.com/jobs/list_python' # 真实的API接口的网址(通过F12开发者模式分析出来的) url = 'https://www.lagou.com/jobs/positionAjax.json?=false' # url提交的参数信息, http://xxxxx/?param1=value1¶m2=value2 params = { 'city': city, # 'needAddtionalResult': 'false', } # url以POST方式提交的信息(参数分析出来的) data = { # 'first': 'true', 'pn': page, 'kd': kd } # 头部信息, 为了防止拉钩反爬策略的 headers = { 'UserAgent': ua.random, 'Host': 'www.lagou.com', 'Origin': 'https://www.lagou.com', 'TE':
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。