爬虫状态码412状态
问题
访问"https://www.pudong.gov.cn/zwgk/xqjy-jyjzdgz/2023/104/309147.html",其中请求头也带上足够字段,但是还是访问还是报错412
状态码412含义为:Precondition Failed,服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。
这一般是zf网站防止爬虫做的限制,设置cookies,并且过期时间很短
下面就是访问网页的需要cookies。浏览器内部主动获取cookies,然后在请求带上,而我们爬虫使用request没法直接获取cookies
解决
1.使用模拟浏览器
selenium,playwright等模拟浏览器访问。这部分没确认,而且考虑模拟浏览器比较慢
2.request请求需要获取cookies
本质需要在请求头中带上cookies,但是分析相关请求,但是分析下没有找到获取cookies,底层中肯定是存在获取cookies方式,但是比较耗时
针对两种方式折中下
通过模拟浏览器方式获取cookies,保存缓存,然后在通过requests模块去请求。等cookies过期再次通过模拟获取cookies.这里使用playwright模拟获取cookies
self.headers = {'content-type': 'application/json','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'}# 模拟浏览器方式获取cookiesdef getCookies(url):with sync_playwright() as p:# 显示浏览器,每步操作等待100毫秒browser = p.firefox.launch(headless=True, slow_mo=100)context = browser.new_context()# context.add_init_script(js)page = context.new_page()page.goto(url, timeout=5000) # 设置超时时间为5scookies = context.cookies()browser.close()runCookies = ""for data in cookies:runCookies += data['name'] + "=" + data['value'] + "; "return runCookies# 获取cookiesdef _setCookies(self):url = 'https://www.pudong.gov.cn/zwgk/zwgk_zfxxgkml_abmdr14_zfbm_jyj/index.html'cookies = getCookies(url)header = self.headerheader["Cookie"] = cookies# 获取页面def getPageInfo(self, url):try:if self.getCrawler.getHeader().get("Cookie", "") == "":self._setCookies()with requests.session() as req:response = req.get(url, headers=self.headers)self._handle(response, url)return response.textprint(page)except Response412Error:# 针对返回码412,重新获取cookiestry:self._setCookies()page = self.getCrawler.getBySession(url)return getDataPuDongGov(url, page, model=self.model, logger=self.logger)except Exception:print("再次执行报错:" + url)except Exception:print("报错:" + url)
爬虫状态码412状态相关推荐
- python状态码409_HTTP状态码
HTTP各种相应的状态码 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 28 ...
- 302状态码_HTTP状态码status code详解
http状态码可以让我很方便的了解到请求的所在状态,所以很有必要总结一下,对今后的学习也是很有帮助的. 什么是HTTP状态码 HTTP状态码的作用是:web服务器用来告诉客户端,发生了什么事. 状态码 ...
- 状态码202_HTTP状态码大全
1xx消息 这一类型状态码代表请求已被接收,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束. 100 客户端应当继续发送请求.这个临时响应是用来通知客户端,它的部分 ...
- 状态码302_HTTP状态码 201,202,302,405 ... 傻傻分不清,看这一个项目就够啦
本期搬运 [github]http.cat,它是一款用于提供对应HTTP状态码界面模板的API,并且每次都会返回一张寓意如图的 喵喵相片. 本篇文章大约需要3分钟来阅读,热衷吸猫人士可能会更久.届时你 ...
- 网页状态码(HTTP状态码)。
下面用表格列出了常见的错误代码及错误原因: 状态码 说明 详情 100 继续 请求者应当继续提出请求.服务器已收到请求的一部分,正在等待其余部分. 101 切换协议 请求者已要求 ...
- 什么是HTTP状态码 常见状态码集合
什么是HTTP状态码? HTTP状态码:这是服务器和客户端之间交流信息的语言. 比如: 当客户端向服务器请求一个死链接时,服务器会返回"404"的信息. "404&quo ...
- python网页查询然后返回结果_python(30) 获取网页返回的状态码,状态码对应问题查询...
获取访问网页返回的状态码 html = requests.get(Url) respon= html.status_code 以下内容来自于维基百科:点击查看网页 1xx消息 这一类型的状态码,代表请 ...
- python requests 状态码_requests 状态码
# 信息性状态码 100: ('continue',), 101: ('switching_protocols',), 102: ('processing',), 103: ('checkpoint' ...
- 302状态码_http状态码是什么?301 302 404的SEO应用场景
什么是HTTP状态码?简单的讲,就是用以表示网页服务器HTTP响应状态的3位数字代码.其中1xx表示临时响应,2xx表示成功处理了请求,3xx代表重定向,4xx表示请求错误,而5xx表示服务器错误.除 ...
最新文章
- 解决jQuery和其它库的冲突
- 谷歌年初将推低价平板电脑 与亚马逊竞争
- Response对象学习
- 说说 “后台开发” 需要注意哪几点
- how to find the tomcat version info on linux
- 如何对一组 IP 地址 进行排序?
- [JavaWeb-HTML]HTML标签_图片标签
- java 11:数组作为函数参数,数组做为函数返回值
- 去Oracle不仅是BAT的事,AWS彻底去O
- 漫谈云计算与OpenStack的前世今生
- oracle如何创建基表,创建本地基表的物化视图
- 秋招准备之——计算机操作系统
- Java快逸报表展现demo,快逸报表展示图片—来自数据库中的图片
- 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,计算机职称考试题目(网络基础答案)...
- linux音频设备接口,OSS--跨平台的音频接口简介
- 【pytorch】时间序列预测 —— 同时预测多个分位点
- windows系统使用cmd命令打开谷歌浏览器并设置用户资料方法步骤
- 市政管理学考试试题及答案
- WPF 中 TextBlock 和 TextBox 区别
- Web前端工程师常去的15个技术网站
热门文章
- 计算机技能鉴定培训内容,计算机网络管理员职业技能鉴定培训班教学计划大纲.doc...
- python爬取图片实例_Python简单爬取图片实例
- 基于HDMI的视频流输入输出
- PAIP WEB程序网站安全扫描检测工具(桌面程序)总结
- “百城千园行”活动 四信5G工业智能网关服务园区智能升级
- Activity生命周期学习总结2
- BUUCTF ciscn_2019_c_1
- python笔记(九):字符串str查询、大小写传唤、拆分、替换、切割
- 心碎了没有人说自己是无所谓的
- uQRCode生成二维码