问题

访问"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状态相关推荐

  1. python状态码409_HTTP状态码

    HTTP各种相应的状态码 HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.它由 RFC 2616 规范定义的,并得到RFC 2518.RFC 28 ...

  2. 302状态码_HTTP状态码status code详解

    http状态码可以让我很方便的了解到请求的所在状态,所以很有必要总结一下,对今后的学习也是很有帮助的. 什么是HTTP状态码 HTTP状态码的作用是:web服务器用来告诉客户端,发生了什么事. 状态码 ...

  3. 状态码202_HTTP状态码大全

    1xx消息 这一类型状态码代表请求已被接收,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束. 100 客户端应当继续发送请求.这个临时响应是用来通知客户端,它的部分 ...

  4. 状态码302_HTTP状态码 201,202,302,405 ... 傻傻分不清,看这一个项目就够啦

    本期搬运 [github]http.cat,它是一款用于提供对应HTTP状态码界面模板的API,并且每次都会返回一张寓意如图的 喵喵相片. 本篇文章大约需要3分钟来阅读,热衷吸猫人士可能会更久.届时你 ...

  5. 网页状态码(HTTP状态码)。

    下面用表格列出了常见的错误代码及错误原因: 状态码 说明      详情 100  继续    请求者应当继续提出请求.服务器已收到请求的一部分,正在等待其余部分. 101 切换协议   请求者已要求 ...

  6. 什么是HTTP状态码 常见状态码集合

    什么是HTTP状态码? HTTP状态码:这是服务器和客户端之间交流信息的语言. 比如: 当客户端向服务器请求一个死链接时,服务器会返回"404"的信息. "404&quo ...

  7. python网页查询然后返回结果_python(30) 获取网页返回的状态码,状态码对应问题查询...

    获取访问网页返回的状态码 html = requests.get(Url) respon= html.status_code 以下内容来自于维基百科:点击查看网页 1xx消息 这一类型的状态码,代表请 ...

  8. python requests 状态码_requests 状态码

    # 信息性状态码 100: ('continue',), 101: ('switching_protocols',), 102: ('processing',), 103: ('checkpoint' ...

  9. 302状态码_http状态码是什么?301 302 404的SEO应用场景

    什么是HTTP状态码?简单的讲,就是用以表示网页服务器HTTP响应状态的3位数字代码.其中1xx表示临时响应,2xx表示成功处理了请求,3xx代表重定向,4xx表示请求错误,而5xx表示服务器错误.除 ...

最新文章

  1. 解决jQuery和其它库的冲突
  2. 谷歌年初将推低价平板电脑 与亚马逊竞争
  3. Response对象学习
  4. 说说 “后台开发” 需要注意哪几点
  5. how to find the tomcat version info on linux
  6. 如何对一组 IP 地址 进行排序?
  7. [JavaWeb-HTML]HTML标签_图片标签
  8. java 11:数组作为函数参数,数组做为函数返回值
  9. 去Oracle不仅是BAT的事,AWS彻底去O
  10. 漫谈云计算与OpenStack的前世今生
  11. oracle如何创建基表,创建本地基表的物化视图
  12. 秋招准备之——计算机操作系统
  13. Java快逸报表展现demo,快逸报表展示图片—来自数据库中的图片
  14. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,计算机职称考试题目(网络基础答案)...
  15. linux音频设备接口,OSS--跨平台的音频接口简介
  16. 【pytorch】时间序列预测 —— 同时预测多个分位点
  17. windows系统使用cmd命令打开谷歌浏览器并设置用户资料方法步骤
  18. 市政管理学考试试题及答案
  19. WPF 中 TextBlock 和 TextBox 区别
  20. Web前端工程师常去的15个技术网站

热门文章

  1. 计算机技能鉴定培训内容,计算机网络管理员职业技能鉴定培训班教学计划大纲.doc...
  2. python爬取图片实例_Python简单爬取图片实例
  3. 基于HDMI的视频流输入输出
  4. PAIP WEB程序网站安全扫描检测工具(桌面程序)总结
  5. “百城千园行”活动 四信5G工业智能网关服务园区智能升级
  6. Activity生命周期学习总结2
  7. BUUCTF ciscn_2019_c_1
  8. python笔记(九):字符串str查询、大小写传唤、拆分、替换、切割
  9. 心碎了没有人说自己是无所谓的
  10. uQRCode生成二维码