在抓取数据的时候往往可以通过状态码来判断返回结果,今天在抓取数据的时候碰到了以前没有碰到过得状态码521,输出它的爬取内容(text),发现是一些js代码。一起探讨一下如何处理521状态码。

用charles抓包的时候,发现浏览器对于同一网页连续访问了两次,第一次的访问状态码为521,第二次为200(正常访问)。看来网页加了反爬虫机制,需要两次访问才可返回正常网页。

通过对比两次请求,我们发现第二次访问带了新的cookie值。再考虑上面程序对爬取结果的输出为js代码,可以考虑其操作过程为:第一次访问时服务器返回一段可动态生成cookie值的js代码;浏览器运行js代码生成cookie值,并带cookie重新进行访问;服务器被正常访问,返回页面信息,浏览器渲染加载。

弄清楚浏览器的执行过程后,我们就可以模拟其行为通过python作网页爬取。操作步骤如下:

用request.get(url)获取js代码

执行函数eval()语句修改为return语句返回cookie值

调用execjs执行js代码获得cookie值

将cookie值转化为字典格式,用request.get(url, headers=headers)方法获取得到正确的网页信息

代码如下:

def getResponse():

"""

获取response

:return:

"""

response = requests.get(startUrl, headers=headers)

return response

def getJslid(response):

"""

:param response:

:return:

"""

cook = response.cookies

return '; '.join(['='.join(item) for item in cook.items()])

def getClearance(response):

"""

:return:

"""

txt = ''.join(re.findall('', response.text))

func_return = txt.replace('eval', 'return')

print(func_return)

content = execjs.compile(func_return)

eval_func = content.call('x')

name = re.findall(r'var (.*?)=function.*', eval_func)[0]

mode_func = eval_func.replace('while(window._phantom||window.__phantomas){};', ''). \

replace('document.cookie=', 'return').replace('if((function(){try{return !!window.addEventListener;}', ''). \

replace("catch(e){return false;}})()){document.addEventListener('DOMContentLoaded',%s,false)}" % name, ''). \

replace("else{document.attachEvent('onreadystatechange',%s)}" % name, '').replace(

r"setTimeout('location.href=location.pathname+location.search.replace(/[\?|&]captcha-challenge/,\'\')',1500);",

'')

content = execjs.compile(mode_func)

cookies = content.call(name)

# print(cookies)

clearance = cookies.split(';')[0]

return clearance

def structureHeaders(cook, clearance):

"""

构造新的headers

:return:

"""

cookie = {

'cookie': cook + ';' + clearance

}

return dict(headers, **cookie)

标签:return,python,爬虫,replace,headers,cookie,521,func,response

来源: https://www.cnblogs.com/gongs/p/10524710.html

html状态码521,python爬虫 处理521状态码相关推荐

  1. python百度云盘搜索引擎_2016百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...

    品牌: 其他 语言: PHP 数据库: Mysql 源文件: 完全开源(含全部源文件) 授权: 免授权 规格: 整站源码 移动端: 无移动端 安装服务: 收费安装(另补差价) 操作系统: Window ...

  2. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  3. python 百度云搜索引擎入口_2016最新百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...

    源码简介 : 适用范围:百度云网盘 搜索引擎 源码,百度 搜索引擎 源码,网盘搜索 爬虫 源码 演示地址:(以截图为准) 运行环境:PHP.MYSQL 其他说明:分享的是一款 搜索引擎 源码,百度云盘 ...

  4. Python爬虫之路-打码平台的使用

    验证码处理 学习目标 了解 验证码的相关知识 掌握 图片识别引擎的使用 了解 常见的打码平台 掌握 通过打码平台处理验证码的方法 1.图片验证码 1.1 什么是图片验证码 验证码(CAPTCHA)是& ...

  5. 网盘搜索引擎php源码,2016最新百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...

    源码简介 : 适用范围:百度云网盘 搜索引擎 源码,百度 搜索引擎 源码,网盘搜索 爬虫 源码 演示地址:(以截图为准) 运行环境:PHP.MYSQL 其他说明:分享的是一款 搜索引擎 源码,百度云盘 ...

  6. 最详细的爬虫实战 | 手把手教你用Python爬虫(附详细源码)

    什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...

  7. 豆瓣python源码_(附源码)Python爬虫之豆瓣攻坚战

    我:好无聊鸭~有没有好电影推荐一下鸭? 惨绿青年:你不是会制作python爬虫了吗?自己去豆瓣top250爬一下呗. 我:诶,居然还有这样的网站,让我赶紧去瞧瞧. 于是Paradoxical就打开了豆 ...

  8. python爬虫代码实例源码_python爬虫代码示例分享

    这篇文章主要介绍了三个python爬虫项目实例代码,使用了urllib2库,文中示例代码非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下. python爬虫代码示例分享 一. ...

  9. 十一个爆火的Python爬虫实战项目源码【不用谢】

    目录 Python爬虫:爬取豆瓣电影中速度与激情8演员图片 Python爬虫:斗鱼弹幕相关信息保存到mongodb Python爬虫:抓取喜马拉雅电台音频 Python爬虫-抓包分析爬取实习僧全部招聘 ...

最新文章

  1. 猪行天下之Python基础——7.1 文件存储
  2. MySQL Workbench 导出数据库脚本(图文)
  3. 数据库复杂查询,多表多联
  4. php获取页面的可视内容高度,网页制作技巧:获取页面可视区域的高度_css
  5. Ajax解析JSON文件
  6. C#基础(201)--常量枚举
  7. php 查找无限级,Ztree + PHP 无限级节点 递归查找节点法
  8. 照着官网来安装openstack pike之neutron安装
  9. PostgreSQL 12系统表(8)pg_indexes
  10. request,response,session
  11. EXCEL 选中单元格并拖动等操作。
  12. 4 图像处理基础知识
  13. 飞思卡尔单片机c语言编程详解,飞思卡尔单片机PIT汇编编程(一)
  14. 怎么修改计算机日志里的用户,修改电脑日志保存位置的方法
  15. 北理乐学大学计算机实验4,北理乐学C语言答案.docx
  16. 阿里云ECS建网站(建站)超详细全套完整图文教程!菜鸟必看!
  17. ineligible devices xcode6.3
  18. UIImageView做动画的坑
  19. VS将复制过来的文件或文件夹显示到解决方案管理
  20. 转载一些关于QQ空间的文章

热门文章

  1. 新笔记本无法激活Office解决办法
  2. APP安卓应用市场上架隐私政策问题、自启动和关联启动说明
  3. 了解客户的关键:客户旅程图的定义和提示
  4. linux-1-常用shell命令复习
  5. cocos2d中,设置层的可视区域
  6. 西交大计算机考博学术英语,英语组举办题为《英语考博经验分享》的学术交流活动通讯...
  7. 理科女学医好还是学计算机好,理科女生适合的专业有哪些
  8. chromOS创建crouton
  9. php链接软件下载_PHP生成迅雷、快车、旋风等软件的下载链接代码实例
  10. Could not chdir to home directory /app/fileserver: Permission denied的解决方法