爬取拉勾网职位信息
分析拉勾网
拉勾网是具有一定反爬,它是通过cookie的识别来限制你的爬取。
首先分析网站,分析最开始的cookie。
搜索框中输入python
找到这条数据
服务器会通过最开始的 ‘set-cookie’ 生成一个cookie信息。
然后生生成这么一大串cookie,当然可以用这一串去请求,但是这不是我们的目的,而且可能爬取十条信息就被限制了。我们需要根据最开始的主站返回的cookie来请求后面的数据。
也就是请求"https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
获得cookie,在将获得cookie放入到我们要请求数据的cookie参数中。
获取cookie信息和参数等
首先定义一个方法 get_cookies() 获取最初的cookies
如果之前已经打开过拉勾网,则必须清除它的cookies。
可以通过chrome浏览器,隐私设置->网站设置->查看各网站的权限及储存的数据。将拉勾网重制权限,并清除数据。
def get_cookies(url):
# 获取最新的cookie(由第一个网站生成)
try:
headers = {
'origin': 'https://www.lagou.com',
'referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
'authority': 'www.lagou.com',
'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',
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.cookies.get_dict()
except RequestException:
return None
用get_dict() 返回一个字典形式的cookies
这个方法请求的url是
“https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=”
{
'X_HTTP_TOKEN': '42daf4b72327b2818725861951bf5e71415983ed09', 'user_trace_token': '20200609144758-7080ec30-c3aa-4260-8a2d-98b123d1fc49', 'JSESSIONID': 'ABAAABAABAGABFAB1C2B1FB95E5F80712153A4764E599D8', 'SEARCH_ID': '8ab88b6deeeb4656ae5b18d5cc3e218d'}
在requests源码中是支持cookies参数接受一个字典
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
目前为止我们已经完成了cookies的获取,接下来就是构造post请求来获取我们要的数据了。
获取关于python的岗位
选择chrome开发者工具工具栏中的xhr选项
经过分析,发现这条是我们要的数据,通过这条辣来请求获取到页面的数据。
接下来构造post请求
定义一个方法 def post_one_page(url,cookies):
其中参数cookies是为了将上面获得cookies传入进去
def post_one_page(url,cookies,pn=1):
# post方法请求网站数据
try:
headers = {
'origin':'https://www.lagou.com',
'referer