【Python爬虫实例】Python解决521反爬方案

本文通过实例解析如何使用Python应对521反爬虫策略,以中国一带一路官网的文章抓取为例,详细介绍了从遇到521错误、查阅资料、修改代码到成功获取数据的全过程,涉及动态参数处理和代码调试技巧。
摘要由CSDN通过智能技术生成

参考文献:https://github.com/xiantang/Spider/blob/master/Anti_Anti_Spider_521/pass_521.py

写在前面的话Python在爬虫方面的优势,想必业界无人不知,随着互联网信息时代的的发展,Python爬虫日益突出的地位越来越明显,爬虫与反爬虫愈演愈烈。下面分析一例关于返回HTTP状态码为521的案例。

1) 浏览器访问【“一带一路”建设成果图鉴丨陆海内外联动,湖北推动产能合作纵深推进】
URL访问

2)写ython代码访问

# coding:utf-8


import requests
from fake_useragent import UserAgent


USER_AGENT = UserAgent()
ua = USER_AGENT.random
url = r'https://www.yidaiyilu.gov.cn/xwzx/gnxw/87373.htm'
headers = {
   
    "Host": "www.yidaiyilu.gov.cn",
    "User-Agent": ua
}
rs = requests.session()
resp = rs.get(url)
print(resp.status_code)
print(resp.text)

不幸的是,返回的http的状态码却是501text为一段混淆的js代码。

request_501
3)百度查资料,推荐为文首的【参考文献】

继续参照资料修改代码,Python执行JS首选execjspip安装如下:

pip install PyExecJS

将请求到的js执行:

text_521 = ''.join(re.findall('<script>(.*?)</script>', resp.text))
func_return = text_521.replace('eval', 'return')
content = execjs.compile(func_return)
print(content.call('f'))

将返回的结果print发现还是一段JS,标准格式化(【格式化Javascript工具】),结果如下所示:

var _2i = function () {
   
        setTimeout('location.href=location.pathname+location.search.replace(/[\?|&]captcha-challenge/,\'\')', 1500);
        document.cookie = '__jsl_clearance=1557019601.296|0|' + (function () {
   
                    var _2i = [([(-~[] << -~[])] * (((+!+{
   }) + [(-~[] << -~[])] >> (-~[] << -~[]))) + []), (-~{
   } + [] + [
                                []
                            ][0]) + [3 - ~(+!+{
   }) - ~(+!+{
   })], (-~{
   } + [] + [
                                []
                            ][0]) + [5], (-~{
   } + [] + [
                                []
                            ][0]) + [~~''], (-~{
   } + [] + [
                                []
                            ][0]), [-~
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值