js反爬:请开启JavaScript并刷新该页

中国人民银行网站中的这个栏目为例:http://www.pbc.gov.cn/zhengcehuobisi/125207/125217/125925/17105/index1.html

如果直接用request.get(url),就会得到下图的JavaScript并刷新该页,跟着一堆乱七八糟代码。

简单来说,就是这个网页用了js设置cookie然后重定向到另一个网页,所以只是get这个url是不行的。

同理,如果清除cookie,在浏览器中f12,然后按f1禁用js

刷新页面,就会出现下图乱码,其实就是之前跑代码得到的 “请开启JavaScript并刷新该页” 提示。

因此,要爬取这个网站的关键问题有两个,一个是用js重定向,一个是保存cookie。

先看看返回的网页的js代码。

这就很乱了,随便用个js代码格式化网站,比如 https://tool.oschina.net/codeformat/js/

这样就可以比较清晰的看到js代码。

一顿分析之后,实现抓取的过程如下:

先get之前能得到的带有js的html。

将其中的js代码正则提取出来。

将里面的atob替换为window["atob"],增加window对象,函数getURL()返回window["location"],即跳转的链接尾缀。

将这个修改后js代码执行,得到尾缀,与原URL链接,得到重定向的URL。

还有就是cookie问题,直接用requests的session处理就好。

def getPage(URL):
    sess = requests.session()
    jsPage = sess.get(URL).text
    js = re.findall(r‘<script type="text/javascript">([\w\W]*)</script>‘, jsPage)[0]
    js = re.sub(r‘atob\(‘, ‘window["atob"](‘, js)
    js2 = ‘function getURL(){ var window = {};‘ + js + ‘return window["location"];}‘
    ctx = execjs.compile(js2)
    tail = ctx.call(‘getURL‘)
    URL2 = urljoin(URL, tail)
    page = sess.get(URL2)
    page.encoding = ‘UTF-8‘
    return page

最后,在连续抓取页面时有时会报错,加了一两秒延迟就好了。还是会偶尔报错,用异常抛出让它重试即可。

原文地址:https://www.cnblogs.com/sumuyi/p/12334154.html

时间: 2024-10-29 19:01:31

js反爬:请开启JavaScript并刷新该页的相关文章

python爬虫的一个常见简单js反爬

python爬虫的一个常见简单js反爬 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成cookie等来操作浏览器这两部分,今天说的是第二种情况. 目标网站 列表页url:http://www.hnrexian.com/archives/category/jk. 正常网站我们请求url会返回给我们网页数据内容等,看看这个网站返回给我们的是什么呢? 我们把相应中返回的js代码格式化一下,方便查

js反爬学习(一)谷歌镜像

1. url:https://ac.scmor.com/ 2. target:如下链接 3. 过程分析: 3.1 打开chrome调试,进行元素分析.随便定位一个“现在访问” 3.2 链接不是直接挂在源码里,而是调用一个名为“visit”的js函数.下一步去找这个函数. 3.3 对资源全局搜索,找到visit函数: 3.4 看到它还调用了一个strdecode函数,再去找: 3.5 看到它还调用了一个base64decode函数,接着找: 上面的变量也是需要的. 3.6 接下来,把所有用到的js

Python3爬虫反反爬之搞定同程旅游加密参数 antitoken

一.前言简介 在现在各个网站使用的反爬措施中,使用 JavaScript 加密算是很常用的了,通常会使用 JavaScript 加密某个参数,例如 token 或者 sign.在这次的例子中,就采取了这种措施来反爬,使用 JavaScript 加密了一个参数 antitoken,而本篇博客要写的就是如何应对和解决的. 二.站点分析 本次爬取的站点链接为: https://www.ly.com/hotel/beijing53/?spm0=10002.2001.1.0.1.4.17. 等页面加载完毕

Python爬虫实践 —— 1.对反爬机制的认识

51zxw发布了一个新课程,是今年二月份的,现在总算是辞职空下来时间了,想着学习下爬虫吧,反正学了也不亏.爬虫算是最简单的东西了,爬虫背靠数据挖掘.数据分析和机器学习,与大数据和AI相比显得没那么高大上,随便一个程序员都能写一个的小爬虫.可是,在数据封锁隐藏,反爬机制不断深入的今天,如何设计爬虫分布式运行架构.有效高匿的代理池.反封号防屏蔽.清洗存储有效数据.优化爬取策略.结合大数据技术,更有效率有质量地获取数据等等云云,也不是看似那么简单.因为当今世纪,数据即是一切,小小爬虫,一定程度上成为了

Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二

说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继续和汽车之间对抗. CSDN上关于汽车之家的反爬文章千千万万了,但是爬虫就是这点有意思,这一刻写完,下一刻还能不能用就不知道了,所以可以一直不断有人写下去.希望今天的博客能帮你学会一个反爬技巧. 今天要爬去的网页 https://car.autohome.com.cn/config/series/59.htm

Python爬虫|深入请求(四)常见的反爬机制以及应对方法

作者:David Qian 链接:https://zhuanlan.zhihu.com/p/21558661 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家好!我是厦门大学王亚南经济研究院的大一学生,今天将由我来为大家介绍一下常见的反爬机制以及应对方法. 注:非商业转载注明作者即可,商业转载请联系作者授权并支付稿费.本人已授权"维权骑士"网站(http://rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权. ---

javascript 无刷新上传图片之原理

刚开始我认为可以像ajax 那样获取到数据然后通过ajax 发送请求,后来发现浏览器为了客户端的安全默认并没有给javascript 这个权限.这个方法当然是行不同了.我看了好像开源的上传图片原理,当然大部分是flash.但是为了方便使用js的也不少. 原理都是使用iframe 上传,在from标签里面有个属性 和a 标签一样 target,target标示这个表单的数据提交的目的地.网页特效代码target里面写iframe的name ,这样表单的数据就提交到了这个 iframe里面.根据这个

常见的反爬机制及应对策略

1.Headers: 从用户的headers进行反爬是最常见的反爬策略,Headers是一种最常见的反爬机制Headers是一种区分浏览器行为和机器行为中最简单的方法,还有一些网站会对Referer (上级链接)进行检测 从而实现爬虫. 相应的解决措施:通过审查元素或者开发者工具获取相应的headers 然后把相应的headers 传输给python 的requests,这样就能很好地绕过. 2.IP 限制 一些网站会根据你的IP 地址访问的频率,次数进行反爬.也就是说如果你用单一的IP 地址访

爬虫与反爬虫的较量-图片反爬

前言 在去年6月吧,刚转行做爬虫的时候,经常拿图片网还有小说网练手,无意中发现一个壁纸网站叫做娟娟壁纸网,有好多高清壁纸(这不是广告,哈哈) 当时是写了全站爬取的代码.以为自己大工告成的时候,结果刚运行,就发现爬出来的图片不对. 每张图片都是这样,我以为遇到了IP限制,于是使用代理,结果仍然是失败. 难道是请求头做了限制?好,那我全部带上.结果依旧失败. 当时也是忙于找工作,也没静下心来仔细想,今天回过头来继续盘它. 虽然最后巧妙的用了get请求爬取成功,但是还是没搞明白原图反爬的原因. 下面来