【爬虫】爬取带有cookie才能获取网页内容的新闻网站

工作任务:

今天老大让我跑取一个新闻网站:https://www.yidaiyilu.gov.cn/

采坑记录:

  • https协议,如果利用http协议去请求会报出如下信息:

错误:SSLHandshake错误就知道了,客户端与服务端进行连接时,需要通过SSL协议进行握手

(坑)改用:重写DefaultHttpClient方法使其支持SSL协议

 

package httpsParse;
import java.security.cert.CertificateException;  
import java.security.cert.X509Certificate;  
import javax.net.ssl.SSLContext;  
import javax.net.ssl.TrustManager;  
import javax.net.ssl.X509TrustManager;  
import org.apache.http.conn.ClientConnectionManager;  
import org.apache.http.conn.scheme.Scheme;  
import org.apache.http.conn.scheme.SchemeRegistry;  
import org.apache.http.conn.ssl.SSLSocketFactory;  
import org.apache.http.impl.client.DefaultHttpClient;  
//用于进行Https请求的HttpClient  
public class SSLClient extends DefaultHttpClient{  public SSLClient() throws Exception{  super();
//传输协议需要根据自己的判断   SSLContext ctx = SSLContext.getInstance("TLSv1.2");  X509TrustManager tm = new X509TrustManager() {  @Override  public void checkClientTrusted(X509Certificate[] chain,  String authType) throws CertificateException {  }  @Override  public void checkServerTrusted(X509Certificate[] chain,  String authType) throws CertificateException {  }  @Override  public X509Certificate[] getAcceptedIssuers() {  return null;  }  };  ctx.init(null, new TrustManager[]{tm}, null);  SSLSocketFactory ssf = new SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  ClientConnectionManager ccm = this.getConnectionManager();  SchemeRegistry sr = ccm.getSchemeRegistry();  sr.register(new Scheme("https", 443, ssf));  }  
}

(坑)然后再利用HttpClient去请求获取网页源代码:

public static void main(String[] args) throws Exception {HttpClientUtil httpClientUtil = new HttpClientUtil();String url = "https://www.yidaiyilu.gov.cn/zchj.htm";String html = httpClientUtil.doGet(url);System.out.println(html);}

 

最后发现得到的结果:是一段js代码

<script>var x="@catch@@@d@@toString@@String@@36@pathname@if@@toLowerCase@var@855@captcha@@Array@@@1@@for@1500@@document@@@@chars@attachEvent@addEventListener@substr@Expires@@false@f@0@fromCharCode@innerHTML@@@@8@@@@@@@split@parseInt@createElement@g@new@16@search@May@@https@@reverse@@RegExp@@while@@@charCodeAt@rOm9XFMtA3QKV7nYsPGT4lifyWwkq5vcjH2IdxUoCbhERLaz81DNB6@@10@JgSe0upZ@else@match@0xFF@@@07@length@@e@eval@@@19@@@Path@a@div@setTimeout@cookie@3@5@@0xEDB88320@@GMT@challenge@@@Tue@@@window@@href@return@try@@@@@location@onreadystatechange@function@1557242170@DOMContentLoaded@@firstChild@replace@__jsl_clearance@charAt@join@".replace(/@*$/,"").split("@"),y="g 3b=3q(){31('3o.3h=3o.c+3o.1s.40(/[\\?|&]i-39/,\\'\\')',q);s.32='41=3r.h|19|'+(3q(){g 1i=[3q(3b){3i 2n('9.1a('+3b+')')},(3q(){g 3b=s.1o('30');3b.1b='<2u 3h=\\'/\\'>3l</2u>';3b=3b.3u.3h;g 1i=3b.2f(/20?:\\/\\//)[19];3b=3b.14(1i.2k).f();3i 3q(1i){p(g 3l=19;3l<1i.2k;3l++){1i[3l]=3b.42(1i[3l])};3i 1i.43('')}})()],3l=[[([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[])+[-~~~!{}+[~~[]]-(-~~~!{})],(-~{}+[]+[[]][19])+[~~'']+[-~(+!+{})],[34]+(-~[-~{}-~{}]+[[]][19]),[-~{}-~[-~{}-~{}]]+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19]),(-~{}+[]+[[]][19])+(-~{}+[]+[[]][19])+[-~(+!+{})],(-~{}+[]+[[]][19])+(-~{}+[]+[[]][19])+[-~{}-~[-~{}-~{}]],[33-~(+!+{})-~(+!+{})]+(-~[-~{}-~{}]+[[]][19]),[34]+[-~(+!+{})],[-~~~!{}+[~~[]]-(-~~~!{})]+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19]),[33-~(+!+{})-~(+!+{})]+(-~[-~{}-~{}]+[[]][19]),(-~{}+[]+[[]][19])+[~~'']+[33-~(+!+{})-~(+!+{})]],[(-~{}+[]+[[]][19])+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19]),[33-~(+!+{})-~(+!+{})]],[[34]+[-~{}-~[-~{}-~{}]],(-~[-~{}-~{}]+[[]][19])+[33-~(+!+{})-~(+!+{})],[34]+[~~''],([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[])+([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[]),([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[])+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19]),(-~{}+[]+[[]][19])+(-~{}+[]+[[]][19])+[34]],[(-~{}+[]+[[]][19])+[-~(+!+{})],([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[])],[[34]+(-~{}+[]+[[]][19]),(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19])+[~~''],[34]+[34],[34]+([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[]),[-~{}-~[-~{}-~{}]]+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19])],[(-~{}+[]+[[]][19])+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19]),(-~{}+[]+[[]][19])+[-~(+!+{})]],[([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[])+[-~~~!{}+[~~[]]-(-~~~!{})],(-~[-~{}-~{}]+[[]][19])+[33-~(+!+{})-~(+!+{})],[34]+(-~{}+[]+[[]][19]),([(-~[]<<-~[])]*(((+!+{})+[(-~[]<<-~[])]>>(-~[]<<-~[])))+[])+(((-~[]<<-~[])<<(-~[]<<-~[]))+[[]][19])]];p(g 3b=19;3b<3l.2k;3b++){3l[3b]=1i.22()[(-~{}+[]+[[]][19])](3l[3b])};3i 3l.43('')})()+';15=3c, 2j-1t-2q 1r:1r:2c 38;2t=/;'};d((3q(){3j{3i !!3f.13;}2(2m){3i 17;}})()){s.13('3s',3b,17)}2e{s.12('3p',3b)}",f=function(x,y){var a=0,b=0,c=0;x=x.split("");y=y||99;while((a=x.shift())&&(b=a.charCodeAt(0)-77.5))c=(Math.abs(b)<13?(b+48.5):parseInt(a,36))+y*c;return c},z=f(y.match(/\w/g).sort(function(x,y){return f(x)-f(y)}).pop());while(z++)try{eval(y.replace(/\b\w+\b/g, function(y){return x[f(y,z)-1]||("_"+y)}));break}catch(_){}</script>
  • 开始怀疑是cookie的原因,然后在浏览器中将cookie带上去最后请求出结果,但是cookie是有有效期的,隔一段时间cookie就失效了,因此这种方法行不通
  • 后来分析发现浏览器访问该网站首先会加载js然后生成cookie,再将这次生成的cookie带上请求头再次请求,所以为什么第一次上面的请求会出现js代码,但是js是动态加载的,因此需要利用java模拟浏览的方式去实现
  • 最终通过htmlunit实现的代码:
package cn.server;import org.openqa.selenium.htmlunit.HtmlUnitDriver;public class GFDynamicWeb {public static HtmlUnitDriver driver = new HtmlUnitDriver();public static boolean isGetCookie = false;
//	public static boolean isRepeatExec = false;public static String GetContent(String url) {if(!isGetCookie) {driver.setJavascriptEnabled(true);//第一次加载js获取cookiedriver.get(url);}driver.setJavascriptEnabled(false);//第二次加载网页源码driver.get(url);String pageSource = driver.getPageSource();isGetCookie = true;return pageSource;}public static void renewIsGetCookie() {isGetCookie = false;}public static void closeDriver() {driver.close();}public static void main(String[] args) {long s = System.currentTimeMillis();for(int i = 0; i < 100; i ++) {String url = "https://www.yidaiyilu.gov.cn/";String content = GetContent(url);System.out.println(content);}long e = System.currentTimeMillis();System.out.println((e - s)/1000 + "秒");renewIsGetCookie();closeDriver();}
}

期间利用的网址:

在线接口测试

521状态码作用

521出错问题解决办法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}

Kmean算法 聚类算法 对于"监督学习"(supervised learning)&#xff0c;其训练样本是带有标记信息的&#xff0c;并且监督学习的目的是&#xff1a;对带有标记的数据集进行模型学习&#xff0c;从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learni…

【使用注意】Boolean是final类型,值初始化后不能被更改

由于服务代码逻辑需要在map中的value存储Boolean&#xff0c;后面的代码逻辑 中我想更改Boolean的值发现更改不了&#xff0c;后来查找资料才发现原来Boolean实现类是定义为final&#xff0c;还是对原理不了解呀&#xff0c;以后多注重原理。 测试代码&#xff08;final类&…

语音识别学习日志 2019-7-15 语音识别基础知识准备4 {Baun-Welch算法}

HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3…

【转载保存】B+树索引原理以及应用案例

地址&#xff1a;https://www.jianshu.com/p/486a514b0ded 利用c/c实现基于b树小型关系型数据库&#xff1a;https://github.com/enpeizhao/duck_db 利用java实现的基于b树的数据库案例&#xff1a;https://github.com/liumengjun/BPlusTreeIndex 1.什么是索引&#xff1f; …

语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}

决策树算法(ID3、 C4.5、 CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法&#xff0c;其基本思想是以信息熵为度量构造一颗熵值下降最快的树&#xff0c;到叶子节点处&#xff0c;熵值为0。其具有可读性、分类速度快的优点&#xff0c;是一种有监督学习。 决策树呈…

【使用注意】文件内容突然消失

最近在写一个搜索&#xff0c;然后做单元测试时候发现只要启动搜索模块&#xff0c;文件内容就会全部消失了。 然后检查是不是文件流的问题&#xff0c;最后定位到是因为利用BufferedWriter中的FileWriter默认是文件覆盖操作&#xff0c;因此在初始化FileWriter的时候会先将文…

语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}

HMM 维特比算法(Viterbi Algorithm)详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorithm-3 …

【使用注意】文件写入不全

如果是利用缓冲流&#xff0c;切记要刷新&#xff01;&#xff01;&#xff01;

语音基础知识-基本语音知识,声谱图,log梅普图,MFCC,deltas详解

基本语音知识&#xff1a; https://www.cnblogs.com/liaohuiqiang/p/9916352.html 语音特征提取基本知识&#xff1a; https://www.cnblogs.com/liaohuiqiang/p/10159429.html 动态时间规整DTW(Dynamic Time Warping)介绍&#xff1a; 作用&#xff1a;求解两个不同的时间…

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

【使用注意】以后定义变量类型利用父类定义

今天在改以前项目出现的bug把HashMap改成ComcurrentHashMap时&#xff0c;很多类的方法参数都需要改动&#xff0c;如果直接定义时候利用父类可以方便下次修改&#xff0c;切记&#xff01;&#xff01;&#xff01;

数据集总结

包含图像语音数据集及项目总结&#xff1a; https://www.jianshu.com/p/d0baf4326ff2 各种免费的数据集&#xff1a; https://www.cnblogs.com/genghenggao/p/9625450.html

【使用注意】多线程导致解码混乱的情况

并发情况下公有变量的文件流操作一定要注意加上synchronized 最近在写搜索引擎发现遇到一个编码问题还有数据乱了等情况&#xff0c;后来查找原因是由于并发情况对文件操作没有考虑用同步方法原因&#xff0c;切记

机器学习中的熵、条件熵、相对熵和交叉熵(为何使用交叉熵作为损失函数)

信息熵&#xff0c;条件熵&#xff0c;相对熵&#xff0c;交叉熵的定义与意义&#xff1a; https://blog.csdn.net/u013569304/article/details/82595548 数据压缩与信息熵&#xff1a; http://www.ruanyifeng.com/blog/2014/09/information-entropy.html

【搜索引擎】lucene事务

本文分两部份&#xff0c;第一部份为译&#xff1a;是对是对于lucene事务的一篇佳作《Transactional Lucene》的翻译。第二部份为解&#xff1a;是本人对一文中提到一些概念在源码层次的一些理解分析&#xff0c;参考lucene源码版本为4.10.4。《Transactional Lucene》中还提到…

语音之特征参数提取

https://blog.csdn.net/w_manhong/article/details/78977833 线性预测分析&#xff08;LinearPredictionCoefficients&#xff0c;LPC&#xff09; 感知线性预测系数&#xff08;PerceptualLinearPredictive&#xff0c;PLP&#xff09; Tandem特征和Bottleneck特征 基于滤…

【转载保存】基于Lucene的近实时搜索引擎优化总结

一、搜索优化&#xff1a; 在工程领域&#xff0c;越是看起来“简单、确定”的问题&#xff0c;越是难以解决。近实时搜索引擎需要解决的问题只有一个&#xff1a;性能&#xff01;它包含快速索引&#xff0c;快速搜索&#xff0c;以及索引到搜索的快速生效。 以下为百万条数据…

经典语音论文

经典语音论文&#xff1a; 语音合成&#xff0c;语音识别 为主 https://github.com/zzw922cn/awesome-speech-recognition-speech-synthesis-papers

【转载保存】linux shell字符串切割成数组

原地址&#xff1a;https://www.cnblogs.com/FlyFive/p/3640243.html a"one,two,three,four" 要将$a分割开&#xff0c;可以这样&#xff1a; 按 CtrlC 复制代码 按 CtrlC 复制代码 上述代码会输出 one two three four arr($a)用于将字符串$a分割到数组$arr …

CTC 语音基础 GMM EM

Connectionist Temporal Classification &#xff08;CTC&#xff09;算法解释 https://www.jianshu.com/p/0cca89f64987 语音中响度&#xff0c;音调与音色的影响因素 https://blog.csdn.net/qq_37385726/article/details/89176142 GMM模型与EM算法 https://blog.csdn.ne…