requests 返回 521
网页端抓数据免不了要跟JavaScript打交道,尤其是JS代码有混淆,对cookie做了手脚。找到cookie生成的地方要费一点时间。
那天碰到这样一个网页,用浏览器打开很正常。然而用requests下载URL却得到“521”的状态码,返回的内容是一串压缩混淆的JavaScript代码。就是下面这个样子:
返回的是JavaScript就好说了。肯定是浏览器运行这段JavaScript后,再次加载就可以得到真实网页内容了。
那么问题来了,这段js代码都做了些什么呢?
我们先观察一下浏览器的加载过程。因为你已经成功打开了这个网页,浏览器已经记住了某些关键的cookies,所以你要先把cookies删除。
如何删除Chrome浏览器记录的某个网站的cookies呢?
打开Chrome的settings,按这个路径寻找cookies删除的地方:Advanced -> Content Settings -> Cookies -> See all cookies and site data 。
然后在右上角的搜索栏搜索 mps.gov 就可以看到这个网站对应的cookies,把它们都删除即可。
打开浏览器的Network,选中“Preserve log”,记住加载的历史,然后用浏览器重新打开这个网址:
http://www.mps.gov.cn/n2253534/n2253535/index.html
可以看到Network记录的加载过程:
观察发现,第一次返回了521,然后停顿片刻(实际上是1.5秒,后面js代码可以看到)再次加载该网页,可以得到正确的网页内容。
对比两次请求的cookies,可以发现第二次多了些cookies。这些cookies有可能就是521时返回的js写进去的。那么我们就来研究一下这段js代码。
首先,我们需要一个js格式化的工具来帮助我们研究这段js代码。工具很多,我们使用 https://beautifier.io/ 。把代码copy到beautifier的网页格式化一下:
先来理解一下这段代码,1-16行没什么特别的。16行要eval()一段js代码字符串,这个很关键,看看它是什么。把 eval 改成 console.log,然后按F12调出Chrome的开发者工具,把全部js代码copy到 Chrome的Console运行一下:
这时候,我们可以看到控制台输出了一段js的代码,把这段代码再copy到beautifier网页格式化一下:
第4行可以看到,是给 document.cookie 赋值了,也就是给浏览器写入的一个名为 __jsl_clearance 的cookie。这个cookie的生成跟第4行最后那个 function 有关,看代码的样子,又是一段加密算法。
我们可以读懂这个function的实现用Python实现算法,但实际上这段代码太难读懂了。我们可以借助Python的 ExecJS、PyV8这样的模块来运行这段js同样也可以得到cookie的值。
有了cookie的值,我们在Python里面使用requests.Session 就可以来加载这个网页了。在Python中得到那个cookies并正确加载网页内容,是对你Python能力的考验,如果遇到什么问题可以留言讨论讨论。
时常有读者在公众号留言给我交流,多次留言比较麻烦,这里开放我微信10个朋友圈名额,可以在微信上跟我交流,只限前10个好友申请。
我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。
***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.com 原创,没有猿人学授权,请勿以任何形式转载。***
requests 返回 521相关推荐
- python解析response_python:解析requests返回的response(json格式)说明
我就废话不多说了,大家还是直接看代码吧! import requests, json r = requests.get("http://192.168.207.160:9000/api/qu ...
- python response.json()报错_python:解析requests返回的response(json格式)说明
我就废话不多说了,大家还是直接看代码吧! import requests, json r = requests.get('http://192.168.207.160:9000/api/quality ...
- python解析response的json_python:解析requests返回的response(json格式)说明
我就废话不多说了,大家还是直接看代码吧! import requests, json r = requests.get('http://192.168.207.160:9000/api/quality ...
- [转载] python解析返回结果_python:解析requests返回的response(json格式)说明
参考链接: python-json 8: 解析requrst的响应 我就废话不多说了,大家还是直接看代码吧!jte免费资源网 import requests, json r = requests.ge ...
- [爬虫]请求返回521解决方法
我需要抓取的网站是国家企业信用信息公示系统,但是该网站有反爬虫,一般的url下载方法并不适用,下面是我通过查资料后总结的一个可行的方法. 首先,要通过url和Cookie还有User-Agent去请求 ...
- python 爬虫返回521
今天爬取网站返回状态码521,经过分析发现是JS混淆加密,以下是具体破解代码: import execjs import re import requests import timeurl = 'ht ...
- 关于Python爬取网页返回521状况码的解决方案
文章目录 问题描述: 原因分析: 解决方案: 方法一: 方法二: 方法三: 代码一 代码二 代码三 代码四 代码五 Test代码 # 项目场景: Python3.8 问题描述: 在使用Python爬虫 ...
- requests 返回的cookies为空_Requests库(七)重定向和超时
由于微信公众号推送改为了信息流的形式,防止走丢,请给加个星标 ⭐,你就可以第一时间接收到本公众号的推送! Requests库分享系列: Requests库(一) Requests库(二) Reques ...
- gb2312 requests乱码_不要相信requests返回的text
本文投稿自公众号:猿人学python Python的requests库是一个非常好用的库,这应该已经是大多写过爬虫的人的共识了.它的简洁易用给我们带来很大方便.然而,它也并不是非常完美.今天我们就说说 ...
最新文章
- 母亲,我怎么让妳等了那么久...
- iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
- html2canvas在Vue项目踩坑-生成图片偏移不完整
- CentOs下php连mssql并配置unixODBC
- MFC子窗口和父窗口(SetParent,SetOwner)
- 发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
- Java程序员需要注意的五大Docker误区
- 如何进行普通家用无线路由器的性能测试?
- 打蚊子表情包_拍蚊子表情包 - 拍蚊子微信表情包 - 拍蚊子QQ表情包 - 发表情 fabiaoqing.com...
- 提前体验饱受期待的Windows Terminal
- Tajima‘s D群体遗传
- 必应搜索结果跳转百度
- 观音菩萨是企业家和领导者的好榜样
- PHPStorm运行PHP代码(新手教程),PHP新手入门教程
- 第3章 词性标注(pos、N-gram、NER等标注器)
- 5W无线充发射IC芯片方案XPM7105、XPM7305 无线充SOC芯片
- html5密码确认属性,HTML5表单及其验证【html自带属性验证】
- 微信小程序实现地图定位
- 【路径规划】FMM快速行进法船舶路径规划【含Matlab源码 2291期】
- html简单个人网页制作——我的家乡——四川文化(4页) HTML+CSS+JavaScript 家乡主题HTM5网页设计作业成品
热门文章
- APP“IP摄像头” 与OpenCV视频流读取
- 《新概念英语》的学习方法
- 音频基础知识以及PCM转WAV
- SEO蜘蛛精破解版 下载
- 黑龙江省计算机二级报名时间2021年3月,黑龙江2021年3月计算机等级考试报名时间已通知...
- 干货!软考中级信息系统监理师备考经验分享
- 史努比类库登录批量回帖
- Swift 2.2 的新特性
- An exception was thrown while activating Castle.Proxies.AppService测试AProxy -> Castle.Proxies.AppServ
- 语音检测心理压力状态