Python 爬取拉勾招聘信息
故事背景
最近有个好哥们啊浪迫于家里工资太低,准备从北方老家那边来深圳这边找工作,啊浪是学平面设计的知道我在深圳这边于是向我打听深圳这边平面设计薪资水平,当时我有点懵逼这个行业不熟悉啊咋搞呢,准备打开招聘网站先看看再说打开网站输入招聘职位发先量还挺大,这样慢慢看不行啊效率太低啦,咋是程序员啊直接把数据拉下来不就行啦于是有啦这篇博客。
技术实现
用到的库
import os
import json
import urllib
import requests
页面分析
数据地址:https://www.lagou.com/
当我在 chrom 中输入拉勾网站查看页面源码时发现页面上的数据并没有直接显示在源码上。推断可能是使用 AJAX 异步加载数据,当我打开 chrom 开发者工具在 network 中查看 XHR 时发现一个 https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false
请求点开 response 果然数据都在这个请求中返回。
返回的数据格式如下:
可以发现我们需要的数据都存放在 result 中,于是准备直接获取数据但是使用 request 去模拟请求发现每次都会被拦截。因为拉勾在不登录的情况下浏览器也能获取数据应该不是用户级别的拦截,猜想可能是在 cookie 层面做的限制,发现请求没有携带网站的 cookie 直接拦截
获取请参数
def get_request_params(city, city_num):
req_url = 'https://www.lagou.com/jobs/list_{}/p-city_{}?&cl=false&fromSearch=true&labelWords=&suginput='.format(urllib.parse.quote(city), city_num)
ajax_url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city={}&needAddtionalResult=false'.format(urllib.parse.quote(city))
headers = headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Referer": "https://www.lagou.com/jobs/list_{}/p-city_{}?px=default#filterBox".format(urllib.parse.quote(city), city_num),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
}
return req_url, ajax_url, headers
于是在 请求中加上 cookie, 代码如下:
def get_cookie(city):
city_num = get_city_num_by_name(city)
req_url, _, headers = get_request_params(city, city_num)
s = requests.