参考文献:https://github.com/xiantang/Spider/blob/master/Anti_Anti_Spider_521/pass_521.py
写在前面的话:Python
在爬虫方面的优势,想必业界无人不知,随着互联网信息时代的的发展,Python
爬虫日益突出的地位越来越明显,爬虫与反爬虫愈演愈烈。下面分析一例关于返回HTTP
状态码为521
的案例。
- 案例网站:【中国一带一路官网】, 以抓取文章【“一带一路”建设成果图鉴丨陆海内外联动,湖北推动产能合作纵深推进】为例,进行深度剖析。
1) 浏览器访问【“一带一路”建设成果图鉴丨陆海内外联动,湖北推动产能合作纵深推进】:
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
的状态码却是501
,text
为一段混淆的js
代码。
3)百度查资料,推荐为文首的【参考文献】
继续参照资料修改代码,Python
执行JS
首选execjs
,pip
安装如下:
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]), [-~