简友广场想法

详解拉勾网访问太频繁的问题——Session自动获取cookie

2020-03-15  本文已影响0人  刘年

1、问题描述

用requests打开拉勾网,一般情况下会得到访问太频繁的错误提示。但是实际上是不是呢?只要通过浏览器能打开的那个网页,那么爬虫一般都是可以打开的,所以这其实是一个反爬的问题,最关键就是设置好请求头headers
这里找动态页面的地址我就叙述了,主要是说如何设置请求头,关键是cookie的问题

2、思路描述

前提是找到最终包含你想要数据的动态页面地址
让我们来看看请求头headers里面有哪些信息?

headers
一般情况下,要有User-Agent,然后有Referer,再复杂一点的要有Cookie,如果不嫌麻烦,把这些字段全部复制到请求头里面都行

其他字段都比较简单,可以复制过去,但是cookie由于字符串比较长,容易出问题,因此这里主要说明如何自动获取cookie

3、cookie自动获取

cookie有session自动获取,即我们先以seession的形式打开一个静态网页,然后得到cookie,再将得到的cookie放入请求头中,访问动态页面

4、代码解析

import requests

#地址准备

#静态页面地址
static_url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
#动态页面地址
aj_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'

#设置请求头,复制页面中的请求头即可,设置后格式
headers ={
    'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
}
#传输data数据,用于post动态页面
data = {
    'first': 'true',
    'pn': 1,
    'kd': 'python',
}

#建立session,我们用同一个session先后访问静态和动态页面,可以用同一个cookie
sess =requests.session()

#访问静态页面
sess.get(static_url,headers =headers)
#得到cookie
cookies = sess.cookies
#再请求动态页面
resp =sess.post(url =aj_url,headers=headers, data=data,cookies=cookies)
# resp= sess.post(url=aj_url, headers=headers, data=data, cookies=cookies, timeout=3)
print(resp.text)

贴一个爬取广东省政府采购网的代码

import requests

#地址准备

#静态页面地址
static_url = 'http://www.gdgpo.gov.cn'
#动态页面地址
aj_url = 'http://www.gdgpo.gov.cn/search.do'

#设置请求头,复制页面中的请求头即可,设置后格式
headers ={
    'Referer': 'http://www.gdgpo.gov.cn/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',
}
#传输data数据,用于post动态页面
data = {
    'keyWord': '空间规划',
    'pageIndex':2,
    'pageSize':10,
    "pointPageIndexId":1,
}

#建立session,我们用同一个session先后访问静态和动态页面,可以用同一个cookie
sess =requests.session()

#访问静态页面
sess.get(static_url,headers =headers)
#得到cookie
cookies = sess.cookies
#再请求动态页面
resp =sess.post(url =aj_url,headers=headers, data=data,cookies=cookies)
# resp= sess.post(url=aj_url, headers=headers, data=data, cookies=cookies, timeout=3)
with open('ss.html','w',encoding='utf-8') as ff:
    ff.write(resp.text)

5、引申——json文件的处理

上述中得到的数据是一个json格式文件,json可以直接转成dict字典,然后可以非常方便地取出数据。但是往往得到的json字符串缩进不整齐,很难看出层次关系。


散乱的json数据排列

这时候,推荐一个网站在线json检校工具,复制进去json形式的字符串,可以帮助整理缩进格式。

image.png image.png

可以说是一个很不错的工具。

上一篇下一篇

猜你喜欢

热点阅读