我需要抓取的网站是国家企业信用信息公示系统,但是该网站有反爬虫,一般的url下载方法并不适用,下面是我通过查资料后总结的一个可行的方法。
首先,要通过url和Cookie还有User-Agent去请求一次目标网址,第一次的cookie可以通过浏览器来获取,cookie主要是需要__jsluid和__jsl_clearance。

请求后返回状态为521,返回内容是一串加密后的javascript,解密后可以得到一串正常的js代码,运行js代码就可以得到一个cookie就是__jsl_clearance的。因为我是用的java,所以我是用的java自带的脚本引擎类ScriptEngineManager去解析的。javascript解析看代码:

ScriptEngineManager manager = new ScriptEngineManager();
//得到脚本引擎
ScriptEngine engine = manager.getEngineByName("JavaScript");
//处理加密js
String js = page.trim().replace("<script>", "").replace("</script>", "").replace("eval(y.replace(/\\b\\w+\\b/g, function(y){return x[f(y,z)-1]}));", "y.replace(/\\b\\w+\\b/g, function(y){return x[f(y,z)-1]})");
try {//得到解密后的jsString result = (String) engine.eval(js);result = result.substring(result.indexOf("var cd"),result.indexOf("dc+=cd;")+7);result = result.replaceAll("document*.*toLowerCase\\(\\)", "'x'");//得到cookieString jsl = (String) engine.eval(result);
} catch (ScriptException e) {e.printStackTrace();
}
然后拿得到的cookie再去请求一遍,还会得到一个加密的js,使用上面的解密方法后得到一个cookie。
再通过获取请求头里的cookie拿到__jsluid,两个cookie合成后再请求一次就能得到这个网页的页面源码了。

//得到__jsluid
Header[] headers = response.getHeaders("Set-Cookie");
String jsl = headers[0].getValue().split(";")[0]+";";
因为两个cookie是需要配套使用,不配套的话不能下载成功,还是会返回521
大致思路就是这样,祝你成功!

[爬虫]请求返回521解决方法相关推荐

  1. 织梦DEDECMS QQ一键登录插件返回空白解决方法

    修改织梦网站时,遇到个QQ一键登录返回是空白的问题 找了好久没发现什么原因,最后才知道原因在于服务器, 因为腾讯OAuth2.0采用的是https协议进行数据请求,QQ一键登录插件采用curl拓展对数 ...

  2. java httpclient 302_HttpClient的POST请求返回302解决

    原标题:HttpClient的POST请求返回302解决 HttpClient请求POST提示302,而且返回的response中的Localtion是我访问时使用的URL, 例如:我使用的URL是h ...

  3. 浏览器禁止跨域请求json数据解决方法--jsonp

    浏览器禁止跨域请求json数据解决方法--jsonp 参考文章: (1)浏览器禁止跨域请求json数据解决方法--jsonp (2)https://www.cnblogs.com/uyisi/p/56 ...

  4. windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法

    windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 参考文章: (1)windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求 ...

  5. php实现返回界面,PHP实现模仿socket请求返回页面的方法

    本文实例讲述了PHP实现模仿socket请求返回页面的方法.分享给大家供大家参考.具体实现方法如下: $url = "www.XXXX.com"; //自己做替换 $parse = ...

  6. 系统提示服务器响应错误,Win10系统无法打开软件提示“服务器没有及时响应或控制请求”错误的解决方法...

    [文章导读]在Win10系统中,有用户在打开软件时遇到了"服务器没有及时响应或控制请求"的错误提示,导致无法打开软件,这该如何解决呢? 在win10系统中,有用户在打开软件时遇到了 ...

  7. get、post请求参数乱码解决方法(qq:1324981084)

    get.post请求参数乱码解决方法(qq:1324981084) 参考文章: (1)get.post请求参数乱码解决方法(qq:1324981084) (2)https://www.cnblogs. ...

  8. ueditor上传大容量视频报http请求错误的解决方法

    故障现象: 当使用百度编辑器ueditor上传大容量视频或大容量图片的时候,编辑器报"http请求错误"的解决方法详解: 原因分析: 目前很多CMS整合了百度的ueditor编辑器 ...

  9. React项目中请求跨域解决方法

    React项目中请求跨域解决方法 今天经理给我了一个React项目地址,让我拉下来并跑起来,拉下来运行起来后,发现所有的请求都失败了,并且都是由于跨域问题导致的.花了点时间,解决了这个问题,在这里记录 ...

最新文章

  1. 几何深度学习(Geometric Deep Learning)技术
  2. 依赖注入?依赖注入是如何实现解耦的?
  3. 研究生如何走出“迷茫”?
  4. 圣何塞与 Microsoft 宣布该市为超过 5,000 名市府公务员选择 Office 365、Windows Azure 和 StorSimple...
  5. 摹客iDoc Sketch插件全新改版!
  6. 新手用python2还是3-Python 使用情况调查:2还是3?(附致歉声明)
  7. Python绘图之matplotlib基础教程:matplotlib库图表绘制中常规设置大全(交互模式、清除原有图像、设置横坐标显示文字/旋转角度、添加图例、绘图布局自动调整、图像显示、图像暂停)
  8. SAP-采购订单交货成本抓取方法
  9. 爱屋及乌 年轻投资者因喜爱Snapchat亏钱也买Snap股票
  10. hibernate 与 spring 松散配置的问题
  11. exe软件ui嵌套软件_UI设计行业中的PS软件起什么用途
  12. rabbitmq多个消费者监听一个队列_RabbitMQ的六种工作模式
  13. 润乾报表分组求和_一招搞定各种报表合计需求
  14. windows环境下VS2013编译openSSL
  15. lua_shared_dict的incr方法
  16. wireshark中筛选中文内容
  17. 矩阵的主元+秩+矩阵等价
  18. 力扣刷题之二叉树的层序遍历
  19. html页面增加分页符
  20. python 列表去重 保持顺序

热门文章

  1. 看懂2019世界人工智能大会,“预见”未来
  2. 关于电流检测中分流电阻(Rshunt)选型应考虑的问题
  3. 全方位揭秘!大数据从0到1的完美落地之Linux系统目录和网络连接
  4. Nokia S60v5的用户小心了
  5. 深圳大学计算机语言学,2016深圳大学英语语言文学考研经验贴
  6. css3+jquery+js做的翻翻乐小游戏
  7. sql语言和c语言比,SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比...
  8. 唧唧歪歪非主流网名_世俗的假象令人狼狈不堪
  9. Spring中的IoC(控制反转)和DI(依赖注入)
  10. 语音检测心理压力状态