美文网首页简友广场想法
详解拉勾网访问太频繁的问题——Session自动获取cookie

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

作者: 刘年 | 来源:发表于2020-03-15 19:00 被阅读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

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

相关文章

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

    1、问题描述 用requests打开拉勾网,一般情况下会得到访问太频繁的错误提示。但是实际上是不是呢?只要通过浏览...

  • 框架常用操作

    SESSION 获取SESSION 写入SESSION COOKIE 写入COOKIE 自动转换时间戳 前提:查询...

  • Session

    Session Cookie/Session机制详解

  • Cookie

    参考链接:HTTP cookies 详解cookie/session 的机制与安全nodejs 操作 cookie...

  • 2019-02-21

    python爬取拉勾搜索内容出现操作太频繁的返回结果 看到一个群里有人在问爬取拉勾网不成功,出现操作太频繁的回复,...

  • flask会话技术详解及模板使用

    一、会话技术cookie 概述 设置cookie 获取cookie 删除cookie 二、会话技术session ...

  • flask02

    一、会话技术cookie 概述 设置cookie 获取cookie 删除cookie 二、会话技术session ...

  • 拉勾网岗位爬虫(自动获取cookie,设置好请求头防止提示"频繁

    朋友最近在找产品经理工作机会,由于是从游戏策划转岗过来,他自己投了一些简历无果,我建议他看看哪些岗位在职位描述里提...

  • PHP Cookies

    cookie,session是任何一门语言都会遇到的问题。这里重点讲一下cookie。 比如cookie用于商城网...

  • java-post接口带Cookies

    登录后返回对应的cookie/session,访问下一个接口的时候需要带上cookie或session才能成功的访问

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/mzzrehtx.html