武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据

目录

 

前言

一、要爬取的内容

二、抓包数据

首页文章列表

1、分析

2、代码demo

搜索文章列表

1、分析

2、代码demo:

文章内容展示

1、分析

2、展示方案

三、工具类

四、完整代码


前言

3日之后,这几天大家应该都在家远程办公了吧,我这几天也是,因为白天就是在家远程办公上班了,所以没有及时更新《武汉疫情系列》。到了晚上,因为白天码了代码,晚上娱乐消遣之后才会继续更新,不然看了一天代码,也会有些疲惫

我们都知道,武汉的新型冠状病毒事件几乎席卷了咱们整个中国,甚至还传到了海外,可谓是全民都在为此事件做自己力所能及的事情,其中就包括咱们程序员,就有大佬们自发的组织起了为武汉在github上做了一个开源项目武汉防疫信息收集平台,具体细节内容这里就不赘述了,详情可以戳链接看我之前的一篇文章:《众志成城抗肺炎,程序猿也发挥大作用》

这几天我也为此做点小小的贡献吧,作为一名程序员,这里就写一点爬取的教程吧,希望能够帮助到大家,以及其他程序员,可以快速的开发和集成其他的功能,比如将所有的信息整合,做成另外的一个信息展示平台 网站或者小程序等等。期待你们的作品,如果有我需要的小小的一份帮助的话,可以在文章底部留言或者私信我,我一定会尽快回复贡献自己的一份绵薄之力。
 


一、要爬取的内容

腾讯有一个【新型冠状病毒肺炎实时辟谣】的一个平台,地址:https://vp.fact.qq.com/home

如果大家整合这些信息平台,比如封装成小程序的话,我觉得这些辟谣信息也是必不可少的,所以有必要爬一爬展示出来,大家记得展示的时候,切记要注明来源腾讯较真平台xxxx之类的,避免腾讯版权纠纷,毕竟咱们是好公民讲究版权嘛

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第1张图片

 


二、抓包数据

抓包可以利用抓包工具或者直接浏览器F12看请求数据 ,这里我就直接省略跳过去了,想了解的可以自己搜索教程,我用的抓包工具是fiddler。

首页文章列表

请求地址:https://vp.fact.qq.com/home

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第2张图片

 

1、分析

当我请求首页的时候,可以看到只有这些请求,所以我们获取数据的时候就稍微有点麻烦了,得用正则去解析html代码来获取我们想要的数据了,关于网站的架构模式这篇文章不是重点,我也就不继续分析和猜测了。

我们首页要获取的数据就是如下图这一部分列表的数据

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第3张图片

 查看源代码,可以看到上图对应的数据在这里

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第4张图片

在手机上如果查看这个页面的话,还可以触底无限拉出更多的历史数据,看来在浏览器是无法实现这个操作了,先不用手机模拟器,咱们用电脑端微信试试,发现是可行的,电脑微信端触底可以无限拉出更多数据。再次抓包看看无限拉的时候是怎么样请求的

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第5张图片

 

大家可以看到我圈起来的部分,有一个/loadmore的请求,发现了新大陆,而且我们还可以清楚的看到几个请求的参数

artnum、page、_、callback

artnum:我暂时不知道什么意思,

page:应该很简单,就是页码,page=1,page=2,page=3说明刚才我触底上拉的数据拉了三页,那我们猜测一下,page=0的时候,会不会就是刚才我前面讲的要解析html的内容呢?如果page=0可以查出没有下拉的首页数据,那我们就不用用正则解析html了,那就更好了,当然这里只是猜测,等一下试一下。

(后面我测试的时候,发现猜测正确,page=0的时候,确实出来的数据就是第一次进来这个页面的数据,所以我们不用正则解析html 了,太棒了!)

_:这个猜测应该是一个时间戳

callback:这是一个跨域回调的意思,这里就不继续深入研究了,咱们就原模原样的拼接上去就是了

 

所以新的请求路径为:https://vp.fact.qq.com/loadmore?artnum=0&page=0&_=1580922845373&callback=jsonp0


2、代码demo

/**
     * 腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台 文章列表数据
     * @param pageNo 页码
     * @return
     */
    public static String getTxFactIndexData(String pageNo){
        //String url="https://vp.fact.qq.com/home";
        //String url="https://vp.fact.qq.com/loadmore?artnum=0&page=0&_=1580922845373&callback=jsonp0";
        String url="https://vp.fact.qq.com/loadmore";
        if(pageNo==null||"".equals(pageNo)){ //如果页码没有传,默认为第一页
            pageNo="0";
        }
        String jsonpNum = "jsonp"+pageNo;
        Map paramObj = new HashMap();
        paramObj.put("artnum","0");
        paramObj.put("page",pageNo);
        paramObj.put("_",System.currentTimeMillis());
        paramObj.put("callback",jsonpNum);

        //模拟请求
        HttpPojo httpPojo = new HttpPojo();
        httpPojo.setHttpHost("vp.fact.qq.com");
        httpPojo.setHttpAccept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
        httpPojo.setHttpConnection("keep-alive");
        httpPojo.setHttpUserAgent("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3724.8 Mobile Safari/537.36");
        httpPojo.setHttpReferer("https://vp.fact.qq.com/home");
        httpPojo.setHttpOrigin("https://vp.fact.qq.com/home");

        String htmlResult = httpSendGet(url, paramObj, httpPojo); //整个html页面
        //System.out.println(htmlResult);
        htmlResult = getRegContent(jsonpNum+"?\\((.*?)\\)$", htmlResult, 1);
        System.out.println(htmlResult);

        //遍历入库或者存redis等操作
        /*JSONObject dataJo = JSONObject.parseObject(htmlResult);
        String content = dataJo.getString("content");//拿到所有数据
        JSONArray array = JSONArray.parseArray(content);
        for (int i = 0; i < array.size(); i++) {
            JSONObject tripJo = JSONObject.parseObject(array.getString(i));
            String title = tripJo.getString("title");
            System.out.println("title:"+title);

            //入库操作
        }*/

        return htmlResult;
    }

运行效果:可以自行复制打印出来的结果在 在线json格式化网站解析一下看看:http://www.bejson.com/count.html

{"code":0,"content":[{"title":"纸尿裤材料被征用去做口罩,很多纸尿裤厂家已停产","author":"较真查证员","authordesc":"较真查证员","id":"8f8296a9feda4fddd02930b1aa08c538","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"医用口罩和纸尿裤虽然都用到无纺布,但是具体的材质并不一样...","tag":["口罩","纸尿裤"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/v99dWFPnih38WmpN72RGyw?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/v99dWFPnih38WmpN72RGyw","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/v99dWFPnih38WmpN72RGyw?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"红糖、生姜、大葱白和大蒜熬水喝,不会感染新冠病毒","author":"美国普渡大学农业与生物系食品工程专业博士","authordesc":"美国普渡大学农业与生物系食品工程专业博士","id":"4216858ab0ff60218452bd9430e51d86","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"可以把这些东西煮水喝当做一种“代茶饮”,如果再加上排骨或鸡块...","tag":["红糖","生姜"],"type":1,"videourl":"","cover":"https://p.qpic.cn/jiaozhen/0/157b3c9c7a37dc5fae9fa3c53fe5317c/0?imageView2/2/w/150/h/90","coverrect":"https://p.qpic.cn/jiaozhen/0/157b3c9c7a37dc5fae9fa3c53fe5317c/0","coversqual":"https://p.qpic.cn/jiaozhen/0/157b3c9c7a37dc5fae9fa3c53fe5317c/0?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"防溢乳垫贴在非医用一次性口罩上能过滤病毒","author":"腾讯医典","authordesc":"腾讯旗下专业医学科普平台","id":"ff20cea8f85f7aadaea1b1eabdac7c4e","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"防溢乳垫贴的主要材质包括涤纶、拉绒棉、全面、无纺布、木浆棉等...","tag":["防溢乳垫贴","口罩"],"type":1,"videourl":"","cover":"https://p.qpic.cn/jiaozhen/0/19c29c181ef653df8d4d3c09acea5b99/0?imageView2/2/w/150/h/90","coverrect":"https://p.qpic.cn/jiaozhen/0/19c29c181ef653df8d4d3c09acea5b99/0","coversqual":"https://p.qpic.cn/jiaozhen/0/19c29c181ef653df8d4d3c09acea5b99/0?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"预防肺炎的疫苗能防止新型冠状病毒感染","author":"联合国系统内卫生问题的指导和协调机构","authordesc":"联合国系统内卫生问题的指导和协调机构","id":"b4983676dce077f2ad05cec14f5ce986","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"肺炎球菌疫苗和乙型流感嗜血杆菌疫苗等肺炎疫苗不能预防新型冠状病毒肺...","tag":["新型冠状病毒","肺炎"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/4H8VTJkYMuVbN5UfqiaGkT?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/4H8VTJkYMuVbN5UfqiaGkT","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/4H8VTJkYMuVbN5UfqiaGkT?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"美国医生援助中国前集体祷告","author":"国际谣言查证机构","authordesc":"国际谣言查证机构","id":"9e7d1b13fa9032d57c7270036c01cbee","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"经查,这是2018年的老视频...","tag":["新型冠状病毒","美国"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/qVhuWax5vVkzmNCQJToYjr?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/qVhuWax5vVkzmNCQJToYjr","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/qVhuWax5vVkzmNCQJToYjr?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"美国选择货机撤侨,是给中国送防疫物资","author":"国际谣言查证机构","authordesc":"国际谣言查证机构","id":"7835c7a3b0e74d22235ad3734c4bce33","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"经查,这并非事实。美国从武汉撤侨时,并未给中国运送过防疫物资...","tag":["美国","撤侨"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/4a9V2XdtqMVLdKEkagXw3k?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/4a9V2XdtqMVLdKEkagXw3k","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/4a9V2XdtqMVLdKEkagXw3k?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"适量饮酒可以抵抗新型冠状病毒","author":"美国普渡大学农业与生物系食品工程专业博士","authordesc":"美国普渡大学农业与生物系食品工程专业博士","id":"cb9d7a0c4a284758b2122698bf7836c1","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"把“适量饮酒”写入防疫建议,是没有任何依据的想当然...","tag":["饮酒","新型冠状病毒"],"type":1,"videourl":"","cover":"https://p.qpic.cn/jiaozhen/0/1fb11efe3946fc0ad0e69392779668b1/0?imageView2/2/w/150/h/90","coverrect":"https://p.qpic.cn/jiaozhen/0/1fb11efe3946fc0ad0e69392779668b1/0","coversqual":"https://p.qpic.cn/jiaozhen/0/1fb11efe3946fc0ad0e69392779668b1/0?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"新风系统会传播病毒,导致感染新型冠状病毒肺炎","author":"卓正医疗皮肤科医生","authordesc":"卓正医疗皮肤科医生","id":"3f7766a2e99254d43e96f43479d7892b","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"在室内当感染者打喷嚏、说话或咳嗽时...","tag":["新型冠状病毒","新风系统"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/3LesBmNMRfSWNGojnJ9QwR?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/3LesBmNMRfSWNGojnJ9QwR","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/3LesBmNMRfSWNGojnJ9QwR?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"湖北仙桃开来的轿车上有人被测出高温后逃跑","author":"泉州晚报社出版的综合性市民生活报","authordesc":"泉州晚报社出版的综合性市民生活报","id":"14c3f8f60176dd488393ad113baf521e","date":"2020-02-05","markstyle":"fake","result":"假","explain":"谣言","abstract":"黄山等地网警已经对该信息进行了辟谣...","tag":["湖北","新塘"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/hemuxFCyzDZigyHcpZeXV2?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/hemuxFCyzDZigyHcpZeXV2","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/hemuxFCyzDZigyHcpZeXV2?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"},{"title":"口罩接水不渗水,说明能抵抗新型冠状病毒肺炎","author":"腾讯旗下专业医学科普平台","authordesc":"腾讯旗下专业医学科普平台","id":"f0b756d05e5c67f88cc062c127461abc","date":"2020-02-04","markstyle":"fake","result":"假","explain":"谣言","abstract":"非N95或外科口罩,即便不渗水,也不能抵抗新型肺炎病毒的传播...","tag":["口罩","新型冠状病毒肺炎"],"type":1,"videourl":"","cover":"//jiaozhen-70111.picnjc.qpic.cn/mncY8ccuamxW4sCrtE5ZH4?imageView2/2/w/150/h/90","coverrect":"//jiaozhen-70111.picnjc.qpic.cn/mncY8ccuamxW4sCrtE5ZH4","coversqual":"//jiaozhen-70111.picnjc.qpic.cn/mncY8ccuamxW4sCrtE5ZH4?imageView2/2/w/300/h/300","section":"","iscolled":false,"arttype":"normal"}]}

搜索文章列表

刚才的文章列表是默认显示的列表数据,还有一个重要的功能是搜索某个关键词,然后根据关键词展示出来的列表数据,如下图所示

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第6张图片

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第7张图片

1、分析

可以看到 /searchresult 这个请求,可以找到相应的参数title、num、_、callback

title:就是搜索的关键词

num:数据展示数目,通过对比找到规律,可以得到公式:num=pageNo*20     (注:pageNo从0算起)

_:时间戳

callback:jsonp后面的数字等于pageNo+1  (注:pageNo从0算起)

所以请求地址:https://vp.fact.qq.com/searchresult?title=%E7%97%85%E6%AF%92&num=0&_=1580925707024&callback=jsonp1


2、代码demo:

/**
     * 腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台 根据关键词搜索文章列表
     * @param pageNo
     * @param titleText
     * @return
     */
    public static String getTxFactSearchResultByTitle(String pageNo,String titleText){
        String htmlResult="fail";
        try {
            //String url="https://vp.fact.qq.com/searchresult?title=%E7%97%85%E6%AF%92&num=0&_=1580925707024&callback=jsonp1";
            String url="https://vp.fact.qq.com/searchresult";
            if(pageNo==null||"".equals(pageNo)){ //如果页码没有传,默认为第一页
                pageNo="0";
            }
            String jsonpNum = "jsonp"+(Integer.parseInt(pageNo)+1);
            Map paramObj = new HashMap();
            paramObj.put("title", URLEncoder.encode(titleText, "utf-8"));
            paramObj.put("num",Integer.parseInt(pageNo)*20);
            paramObj.put("_",System.currentTimeMillis());
            paramObj.put("callback",jsonpNum);

            //模拟请求
            HttpPojo httpPojo = new HttpPojo();
            httpPojo.setHttpHost("vp.fact.qq.com");
            httpPojo.setHttpAccept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
            httpPojo.setHttpConnection("keep-alive");
            httpPojo.setHttpUserAgent("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3724.8 Mobile Safari/537.36");
            httpPojo.setHttpReferer("https://vp.fact.qq.com/home");
            httpPojo.setHttpOrigin("https://vp.fact.qq.com/home");

             htmlResult = httpSendGet(url, paramObj, httpPojo); //整个html页面
            //System.out.println(htmlResult);
            htmlResult = getRegContent(jsonpNum+"?\\((.*?)\\)$", htmlResult, 1);
            System.out.println(htmlResult);

            //遍历入库或者存redis等操作
            /*JSONObject dataJo = JSONObject.parseObject(htmlResult);
            String content = dataJo.getString("content");//拿到所有数据
            JSONArray array = JSONArray.parseArray(content);
            for (int i = 0; i < array.size(); i++) {
                JSONObject tripJo = JSONObject.parseObject(array.getString(i));
                String source = tripJo.getString("_source");
                JSONObject sourceJo = JSONObject.parseObject(source);
                String title = sourceJo.getString("title");
                System.out.println("title:"+title);

                //入库操作
            }*/


        }catch (Exception e){
            e.printStackTrace();
        }
        return htmlResult;
    }

 运行效果:可以自行复制打印出来的结果在 在线json格式化网站解析一下看看:http://www.bejson.com/count.html

{"code":0,"total":637,"content":[{"_index":"jiaozhen","_type":"article","_id":"aa3546e01b77bc4b58499915a551e971","_score":3.0637636,"_source":{"id":"aa3546e01b77bc4b58499915a551e971","title":"腹泻是由病毒引起的","result":"疑-分情况","source":"腾讯较真","abstract":"腹泻分为感染性腹泻与非感染性腹泻两种类型。\n非感染性腹泻不是由病毒引起的,往往是消化不良、暴饮暴食、油腻或辛辣食物刺激等食源性因素所致的,但也有可能是受寒、水土不服、精神紧张等外界刺激导致。\n感染性腹泻其中有一多半是由病毒引起的,也有可能是细菌感染引起的。","cover":"http://p.qpic.cn/jiaozhen/0/7dd2422271f829467d5e94cb8ff6a531/0","updatedAt":"2019-03-22 08:48:30","date":"2018-11-27","author":"腾讯医典","authordesc":"腾讯旗下专业医学科普平台"},"sort":[3.0637636,72423]},{"_index":"jiaozhen","_type":"article","_id":"99c05bceb88fd80418da72d2b2e1ade0","_score":2.9355164,"_source":{"id":"99c05bceb88fd80418da72d2b2e1ade0","title":"新型冠状病毒是SARS病毒的进化","result":"假-谣言","source":"腾讯医典","oriurl":"https://h5.baike.qq.com/mobile/article.html?docid=tx20406001znr0fh&adtag=op.co.jiaoz.ydyw","abstract":"不是!\n近期发布的《武汉新型冠状病毒的进化来源和传染人的分子作用通路》,揭露了新型冠状病毒的“身份”。\n目前已明确,新型冠状病毒属于Beta冠状病毒属(Betacoronavirus),与SARS病毒(导致2002年“非典”)、MERS冠状病毒(“中东呼吸综合征”),平均分别有~70%和~40%的序列相似性。\n新型冠状病毒与SARS病毒的共同祖先是和HKU9-1类似的病毒。在进化树的位置上,它与SARS病毒相邻,但并不属于SARS病毒。\n因此,说新型冠状病毒是SARS进化是不准确的。","cover":"//jiaozhen-70111.picnjc.qpic.cn/f8e2c79bc3bb4682ab1b317575bdcfd0","updatedAt":"2020-02-03 20:48:04","date":"2020-01-26","author":"梁晓丽","authordesc":"北京医院执业药师 "},"sort":[2.9355164,81245]},{"_index":"jiaozhen","_type":"article","_id":"8556230fe0cf93288e72973c9e90587f","_score":2.690024,"_source":{"id":"8556230fe0cf93288e72973c9e90587f","title":"把饭做熟病毒就会被杀死","result":"真-确实如此","source":"腾讯医典","abstract":"目前已经知道,新型冠状病毒对热敏感,56℃ 加热 30 分钟即可灭活。在中国疾病控制中心发布的家庭预防指南中,明确的建议是:不要接触、购买和食用野生动物(即野味),避免前往售卖活体动物(禽类、海产品、野生动物等)的市场,禽肉蛋要充分煮熟后食用。\n将肉类蛋类做熟,是可以灭活新型冠状病毒的。为了保证灭活病毒,加热时间可以尽量保证在30分钟。\n那么,蔬菜也一样吗?在传染病流行期间,不建议吃沙拉这类未经煮熟的蔬菜。最好也加热煮熟。此外,做饭前、吃饭前要注意洗手,吃饭时使用公筷,饭后彻底清洗餐具,这样也有助于预防。","cover":"//jiaozhen-70111.picnjc.qpic.cn/9e8cabc0de8b5030592091541fa7d17f","updatedAt":"2020-02-03 20:52:50","date":"2020-02-03","author":"较真团队","authordesc":"腾讯新闻专业事实查证平台"},"sort":[2.690024,81544]},{"_index":"jiaozhen","_type":"article","_id":"34da5686374365359ba3f1058b64f23b","_score":2.690024,"_source":{"id":"34da5686374365359ba3f1058b64f23b","title":"风油精能抑制病毒感染","result":"假-谣言","source":"腾讯医典","oriurl":"https://h5.baike.qq.com/mobile/article.html?docid=tx20406001bvmo9n&adtag=op.co.jiaoz.ydyw","abstract":"不能!\n风油精是由天然药物和芳香植物精油配制而成,根据国家药典委员会2016年新修订的风油精质量标准,它的主要成分为薄荷脑、水杨酸甲酯(冬青油)、樟脑、丁香酚和桉油。\n这些成分中,薄荷脑和桉油可以激活负责感受温度的神经细胞,使人感觉到凉,而水杨酸甲脂又能刺激皮肤,带来灼烧感。两种感觉叠加,能起到止痒的效果。而风油精中添加的芳香植物精油,有驱蚊效果。\n但风油精及其任何一个主要成分,都没有证据证明能够抑制细菌或病毒感染。而且,其中的水杨酸甲脂是有一定毒性的,如果口服,是会引起中毒的。对儿童来说,摄入超过4毫升可能致命。\n涂抹风油精不能抑制病毒,口服还可能致命。疫情正热,科学地保护家人和自己最重要。","cover":"//jiaozhen-70111.picnjc.qpic.cn/775b6baf32184eb9a51938fa8b75a528","updatedAt":"2020-02-03 20:47:54","date":"2020-01-26","author":"腾讯医典","authordesc":"腾讯旗下专业医学科普平台"},"sort":[2.690024,81254]},{"_index":"jiaozhen","_type":"article","_id":"c727ee3a7a738837963258e28384f513","_score":2.690024,"_source":{"id":"c727ee3a7a738837963258e28384f513","title":"“李咏去世”的视频是病毒,不要打开","result":"假-谣言","source":"腾讯较真","abstract":"安庆网警官方微博@安庆网警巡查执法迅速查证,并进行辟谣:未查到“李咏去世”的视频连接,该消息为谣言。\n但手机点开陌生链接确实有可能会中毒,请大家对手机上收到的任何不明来源链接保持警惕,尤其是陌生人或疑似朋友被盗号后发来的链接。","cover":"http://p.qpic.cn/jiaozhen/0/fcd117eb65cc170339b60c51551300b2/0","updatedAt":"2019-03-22 08:48:30","date":"2018-10-30","author":"腾讯医典","authordesc":"腾讯旗下专业医学科普平台"},"sort":[2.690024,72143]},{"_index":"jiaozhen","_type":"article","_id":"4bc5e92a03bd1fe57dc2b772728e5e51","_score":2.690024,"_source":{"id":"4bc5e92a03bd1fe57dc2b772728e5e51","title":"狗会把埃博拉病毒传染给人","result":"疑-尚无定论","source":"腾讯较真","abstract":"感染埃博拉病毒的病人或动物的血液、尿液、排泄物、呕吐物、精液以及其他分泌物中均可能带有病毒,所以埃博拉病毒的感染渠道有很多,并不能直接证明是狗将埃博拉病毒传染给人的。\n埃博拉流行疫区的犬只身上可以查到病毒抗体,证明这些动物确实曾被埃博拉病毒感染。不过这些犬只感染后并无特殊症状,说明就算犬类感染了病毒,传染性也不强,所以目前还没有直接证据证明病毒可以从感染犬只传染至人。","cover":"http://p.qpic.cn/jiaozhen/0/ebb7f04f65e89451951b75b755162b0c/0","updatedAt":"2019-03-22 08:48:29","date":"2018-08-19","author":"赵言昌","authordesc":"石河子大学临床医学院"},"sort":[2.690024,70197]},{"_index":"jiaozhen","_type":"article","_id":"35e6847e3a5607fee13aa23fc5364a3c","_score":2.690024,"_source":{"id":"35e6847e3a5607fee13aa23fc5364a3c","title":"流感只能由流感病毒引起","result":"真-确实如此","source":"蝌蚪五线谱","oriurl":"http://news.kedo.gov.cn/c/2018-01-12/908395.shtml","abstract":"流感只能由流感病毒引起。流感病毒分为甲型、乙型和丙型三种。不管哪一种,它们在进入呼吸道以后,都会进入上皮细胞大肆繁殖,然后借助神经酸氨酶,从细胞内逃逸出来,如此循环,不断“攻城掠地”,引起广泛的上皮细胞死亡。","updatedAt":"2019-03-22 08:48:28","date":"2018-01-12","author":"","authordesc":""},"sort":[2.690024,69236]},{"_index":"jiaozhen","_type":"article","_id":"2cce4a92af5fd2cce83918b996d7091f","_score":2.690024,"_source":{"id":"2cce4a92af5fd2cce83918b996d7091f","title":"点开顺丰上市的红包会中病毒","result":"假-谣言","source":"谣言过滤器","oriurl":"https://mp.weixin.qq.com/s/z4tW5hrAYcssugPKjbh34w","abstract":"类似所谓的“紧急通知”以前也时有出现,其内容和格式基本一致,唯一不同的是,主角在变,有着“《女人必看》、《钓鱼岛开战啦》、《工资调整方案》”等各个不同的版本,这些都是借公安网监“紧急通知”名义来传播的不实信息。首先,公安部门并未发布此内容的通知,若有需要,往往会以单位名义发布,而不会以个人名义。其次,对不明的陌生链接、可疑红包请不要点开,以免感染木马和上当受骗。最后,希望大家不要轻信这种夸大渲染网络安全风险的行为,并且养成良好的安全上网习惯。","updatedAt":"2018-09-03 17:50:05","date":"2017-03-09","author":"于旸","authordesc":"腾讯玄武实验室负责人  资深专家工程师"},"sort":[2.690024,67758]},{"_index":"jiaozhen","_type":"article","_id":"ddda352e82976a253fb4870fe2958e3a","_score":2.690024,"_source":{"id":"ddda352e82976a253fb4870fe2958e3a","title":"打开《特朗普患中风》的图片会中病毒","result":"假-谣言","source":"谣言过滤器","oriurl":"https://mp.weixin.qq.com/s?__biz=MjM5MjU0NTc4OQ==&mid=2651747810&idx=1&sn=fdb9dbaa6df3e056f1d08192bd5411b2&chksm=bd5e7b708a29f26660c18373017f8fc4a61051a792804fe57391d3ab9b8dc49dd7bc82688847&mpshare=1&scene=1&srcid=0402sqKTKdDGkxES34O7t4AL&key=c7e8e862d11f55a9bcd2b8264219569ba9e6f38ba2a7d45e288a786704a6cac166dd3e285b44fbfa1a60be1632afb2518ec41f02be69216d2c582d97b0073bc038d6e4bdbca8e8e153c0ce14e4c670fb&ascene=1&uin=MTI2NDA1MTg0MQ%3D%3D&devicetype=Windows-QQBrowser&version=6103000b&lang=zh_CN&pass_ticket=RdmY2","abstract":"此为各类以“紧急通知”名义来传播不实信息的内容变种之一。谣言内容一般为假借各种文件名称名义,告知用户不要打开,否则会中毒,甚至导致账户财产损失。类似谣言有“微信红包图片是病毒”“新版人民币视频是病毒”“朴槿惠去世视频是病毒”等等。目的都在于夸大渲染网络安全风险。","updatedAt":"2018-09-03 17:39:47","date":"2018-04-02","author":"","authordesc":""},"sort":[2.690024,67684]},{"_index":"jiaozhen","_type":"article","_id":"8fea58e72d44ea1d3d7d291b473011a8","_score":2.690024,"_source":{"id":"8fea58e72d44ea1d3d7d291b473011a8","title":"“朴槿惠死了”的视频是病毒","result":"假-谣言","source":"腾讯较真","oriurl":"http://view.inews.qq.com/a/20180104A0WF0T00","abstract":"“朴槿惠死了的视频是病毒”,这是一条老旧谣言。它有各种版本,比如“新版人民币视频是病毒”“太原、日本、韩国地震视频是病毒”。\n在手机上打开别人发过来的图片或视频,会不会中毒?这要分两种情况。一种是“有人给你直接发了一个视频文件或图片文件,你看了内容;另一种是“有人给你发了一个视频或图片的链接,你点击链接,查看了内容”。理论上,只要存在合适的漏洞,这两种情况下都有可能实现入侵。但第一种漏洞比较罕见,对目前主流的手机和应用来说,并不存在公开的这类漏洞。至于第二种,腾讯玄武实验室最新的研究表明,部分安全性上欠缺考虑的 APP 确实比较容易在这种情况下被攻击,其中就包括不少大家很常用的 APP 。","cover":"http://p.qpic.cn/jiaozhen/0/49a9cd89e8794c4788813b5adddfead8/0","updatedAt":"2019-03-22 08:48:27","date":"2018-01-04","author":"夏安","authordesc":"传染病学博士"},"sort":[2.690024,67155]},{"_index":"jiaozhen","_type":"article","_id":"2e2318d578fafba4b9df1ed5a6838a95","_score":2.690024,"_source":{"id":"2e2318d578fafba4b9df1ed5a6838a95","title":"微信群中秋祝福信息是病毒","result":"假-谣言","source":"上海辟谣平台","oriurl":"http://www.shobserver.com/news/detail?id=30850","abstract":"从事软件开发的极盟网络CEO郑志伟告诉记者:不要紧张,此类链接只是微信官方跳转接口。\n虽然没必要一看到链接就与钓鱼诈骗联系起来,但是也需提示风险:原链接被篡改后,有可能会被不法分子利用。","cover":"http://p.qpic.cn/jiaozhen/0/1505286698109/0","updatedAt":"2019-03-22 08:48:26","date":"2016-09-16","author":"宋慧","authordesc":"上海辟谣平台记者"},"sort":[2.690024,65898]},{"_index":"jiaozhen","_type":"article","_id":"e9868f3db14806442916ac4f23555633","_score":2.690024,"_source":{"id":"e9868f3db14806442916ac4f23555633","title":"“4G流量免费送”链接是病毒","result":"假-谣言","source":"上海辟谣平台","oriurl":"http://www.shobserver.com/news/detail?id=42523","abstract":"这条“紧急通知”是假冒权威部门的名义发布,内容也大量照搬其他谣言。\n不过网上一些所谓“流量免费送”的链接,确实可能存在风险,不要随便乱点。","cover":"http://p.qpic.cn/jiaozhen/0/1505285877247/0","updatedAt":"2019-03-22 08:48:25","date":"2017-01-17","author":"李晓宁","authordesc":"卓正医疗皮肤科医生"},"sort":[2.690024,65692]},{"_index":"jiaozhen","_type":"article","_id":"4d48863635b80727b40498903a94c541","_score":2.690024,"_source":{"id":"4d48863635b80727b40498903a94c541","title":"上海68名男女死于CTC5病毒","result":"假-谣言","source":"上海辟谣平台","oriurl":"http://www.shobserver.com/news/detail?id=54027","abstract":"2016年3月前后,“一名女子感染SB250病毒死亡”的谣言就开始在网上流传。炮制用“SB”、“250”作为病毒名称,就有恶作剧甚至挑战公众智商的嫌疑。\nSB250病毒谣言在传播过程中,出现多个分支,比如“2SB500病毒”和“sk5”,直到最新版本的“CTC5”。\n谣言中所说的上海第三人民医院,在2014年就已更名为上海交通大学医学院附属第九人民医院(北院)。上海九院宣传科工作人员表示,该院近期并没有“68名男女生感染sB250病毒死亡”事件。工作人员表示,在此之前已关注到这则传言,希望市民不要轻信误信。","cover":"http://p.qpic.cn/jiaozhen/0/1505285069735/0","updatedAt":"2019-03-22 08:48:25","date":"2017-05-23","author":"郑子愚","authordesc":"上海辟谣平台记者"},"sort":[2.690024,65498]},{"_index":"jiaozhen","_type":"article","_id":"08b449aba0d975b50c5917596535d91b","_score":2.690024,"_source":{"id":"08b449aba0d975b50c5917596535d91b","title":"诺如病毒有望被攻克","result":"真-确实如此","source":"话食科普","oriurl":"https://mp.weixin.qq.com/s/i8UK0OuXOUw34RmEMcHcvw","abstract":"美国贝勒医学院的Khalil Ettayebi教授带领的研究团队终于攻克了这个困扰科学家近半个世纪的难题,首次成功地在干细胞来源的非转化人类肠道单层培养系统中培养出了多种诺如病毒毒株。这为开启诺如病毒神秘之门找到了钥匙。","updatedAt":"2019-03-22 08:48:24","date":"2017-01-13","author":"腾讯医典","authordesc":"腾讯旗下专业医学科普平台"},"sort":[2.690024,61953]},{"_index":"jiaozhen","_type":"article","_id":"37a792801918bad2b7001cc1f462ff01","_score":2.690024,"_source":{"id":"37a792801918bad2b7001cc1f462ff01","title":"太原12级地震视频有病毒","result":"假-谣言","source":"山西晚报","oriurl":"http://www.sxwbs.com/wb/news_13/sx_0/6820561.shtml","abstract":"太原市公安局网络警察支队民警表示,首先,单单是太原12级地震的说法就是假消息。全世界范围内有记录的最大震级的地震,是1960年智利地震,震级9.5级。在日常生活中,凡是能将发震时间、地点精确“预报”的,肯定都是谣言。因为目前全世界的地震预报水平都无法达到这样的精度。其次,这则所谓的病毒提醒消息,是一条借助勒索病毒蹭热点的谣言。警方提醒大家,要坚持不信谣、不传谣,做到对来源不明的链接不点击、不理睬。","updatedAt":"2018-08-31 08:10:30","date":"2017-05-22","author":"曹潇","authordesc":"话食科普团队成员"},"sort":[2.690024,22112]},{"_index":"jiaozhen","_type":"article","_id":"73a6c539f8a90a089d71629345ae2d6f","_score":2.6712425,"_source":{"id":"73a6c539f8a90a089d71629345ae2d6f","title":"新型冠状病毒插入的基因片段是精心选择,是人工病毒","result":"假-谣言","source":"腾讯较真","abstract":"首先,暗示“新冠肺炎病毒可能诞生于人为基因改造”的印度作者已经撤稿了。其次,与HIV近似的基因片段并不是“插入”的,这四个短基因序列在很多物种中都存在,且保守。蝙蝠冠状病毒spike也具有该结构,且100%同源。\n“插入增加蛋白的可塑性和水溶性”也毫无道理。新冠肺炎病毒主要是进入呼吸道,通过S蛋白接触人的呼吸道尤其是下呼吸道黏膜上皮的ACE2受体。病毒是个生物体,不是个化合物,病毒没有水溶性一说。病毒作为生物体,不能溶于水,也没有必要溶于水。","cover":"//jiaozhen-70111.picnjc.qpic.cn/3e5ed1cf9c6941c8a784442cfc943fdc","updatedAt":"2020-02-03 20:52:56","date":"2020-02-03","author":"一节生姜","authordesc":"宾夕法尼亚大学医学院病理及实验医药系研究副教授"},"sort":[2.6712425,81514]},{"_index":"jiaozhen","_type":"article","_id":"0ee5b891a540fd29f88cc54ea95c0ce5","_score":2.6712425,"_source":{"id":"0ee5b891a540fd29f88cc54ea95c0ce5","title":"新型冠状病毒感染者粪便里查出病毒 ","result":"真-确有此事","source":"腾讯较真","oriurl":"https://view.inews.qq.com/a/20200202A04B6000","abstract":"深圳市第三人民医院的研究发现某些新型冠状病毒感染者的粪便里检测到病毒,此前美国第一例新型肺炎患者的医学案例报道中,也提到患者的粪便中查到新型冠状病毒,这表明病毒很大可能会通过“粪口传播”。\n冠状病毒也存在于蝙蝠的粪便中,在“非典”患者的粪便和尿液中,也有SARS病毒,在低温下还可以长期存活。\n预防“粪口传染”、“接触传染”,关键是要勤洗手,洗对手。","cover":"//jiaozhen-70111.picnjc.qpic.cn/442e51a694ea0a5faf43b1fc89c4e05a","updatedAt":"2020-02-03 20:53:06","date":"2020-02-02","author":"王思露","authordesc":"内蒙古营养健康促进会副会长、国家二级公共营养师"},"sort":[2.6712425,81483]},{"_index":"jiaozhen","_type":"article","_id":"2b75236662394dd34dedc5f12a86c8a7","_score":2.6712425,"_source":{"id":"2b75236662394dd34dedc5f12a86c8a7","title":"接触沾染了病毒的物品属于接触传播,也可能感染病毒","result":"真-确实如此","source":"腾讯医典","oriurl":"https://h5.baike.qq.com/mobile/article.html?docid=tx20406001fqzx34&adtag=op.co.jiaoz.ydyw","abstract":"最新发布的《新型冠状病毒感染的肺炎诊疗方案(试行第四版)》表明,新型冠状病毒主要感染呼吸道上皮,但传播途径除了空气传播,还包括接触传播。这里的接触传播包括直接接触和间接接触:直接接触主要是指接触到病人的身体的分泌物,例如眼泪、鼻涕、口水、痰液、呕吐物、尿、便等;间接接触则指的是接触到沾染了病毒的物品,包括门把手、楼梯扶手、桌面、手机、玩具、笔记本电脑等。\n病毒在56℃ 下30分钟才会失活,气温是不可能达到这个温度的,这也就意味着,粘在门把手等物体上的病毒是具有传染性的,一旦用手触碰后,如果再用手摸脸、揉眼睛等,就可能被传染。","cover":"//jiaozhen-70111.picnjc.qpic.cn/eb81e82d17df4ef1ad4ef53de5a0da2a","updatedAt":"2020-02-03 20:47:12","date":"2020-01-29","author":"","authordesc":""},"sort":[2.6712425,81348]},{"_index":"jiaozhen","_type":"article","_id":"44ff3c9c3d7a57d8acb22003eec27be6","_score":2.5557194,"_source":{"id":"44ff3c9c3d7a57d8acb22003eec27be6","title":"草莓内含有“诺如病毒”,吃了会中毒","result":"假-伪常识","source":"王思露营养师","oriurl":"http://view.inews.qq.com/a/20180119A0OS3A00","abstract":"“诺如病毒”的确是一种传染性较强的肠道病毒,如果摄入会引起呕吐、腹泻等症状,而它主要通过空气和接触传播。食用草莓感染诺如病毒的原因主要是由于草莓被含有病毒的污染物侵袭,比如被感染的生物或含病毒的污水等,附着在草莓上,如果没洗干净直接吃了的话就可能感染上诺如病毒。\n草莓本身并不含有“诺如病毒”,罪魁祸首并不是它,而是额外的污染物。\n日常生活中您吃的蔬果,无论是草莓还是橙子,吃之前彻底清洗问题不大。","updatedAt":"2019-03-22 08:48:27","date":"2018-01-19","author":"宋慧","authordesc":"上海辟谣平台记者"},"sort":[2.5557194,67904]},{"_index":"jiaozhen","_type":"article","_id":"3f7766a2e99254d43e96f43479d7892b","_score":2.4069686,"_source":{"id":"3f7766a2e99254d43e96f43479d7892b","title":"新风系统会传播病毒,导致感染新型冠状病毒肺炎","result":"假-谣言","source":"腾讯较真","abstract":"在室内当感染者打喷嚏、说话或咳嗽时,病毒可以通过飞沫传播和接触传播。已经进行的几项研究数据证实,通风率越高,室内空气中的飞沫颗粒数量衰减越快,缺乏通气或低通气率增加空气传播感染率和疾病暴发率。未发现任何研究提供了通气率与空气传播感染之间关系的流行病学证据。\n新风系统是由送风系统和排风系统组成的一套独立空气处理系统,无论是管道式新风系统和无管道新风系统都通过新风机净化室外空气导入室内,通过管道将室内空气排出,增加通风可以减少疾病感染几率,办公环境要预防感染还是要带口罩和勤洗手。","cover":"//jiaozhen-70111.picnjc.qpic.cn/3LesBmNMRfSWNGojnJ9QwR","updatedAt":"2020-02-05 01:40:20","date":"2020-02-05","author":"王宇歌","authordesc":"美国国立卫生研究院博士后研究员,免疫学博士"},"sort":[2.4069686,81584]}]}

 


文章内容展示

咱们有了文章列表,接下来点击某个标题进去后,会展示具体内容,我们也要获取到这些内容,才算完整的

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第8张图片

 

1、分析

我们点击文章进去,发现会有一个 /article的请求,这个很好理解,也就是说,我们只要将获取到文章列表的文章id,然后再请求这个链接:https://vp.fact.qq.com/article?id=7b962367fdc55a96e6e94d0d2822ae82

就可以获取到文章内容。

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第9张图片

 

武汉疫情系列(3)|java爬取腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台数据_第10张图片

文章内容大致可以分为这三块,1、流传说法;2、较真鉴定;3、拓展知识点

上面的真实展示效果和查看源代码的两张图123分别是是一一对应的


2、展示方案

这里我有两种解决方案:

(1)、简单一点,我们获取到文章列表后,拿到id,当用户点击某个标题进去的时候,就让他直接点击链接:

https://vp.fact.qq.com/article?+id=xxxxxxxx,进真实的链接。(可取)

如果是小程序的话,个人小程序可以利用客服会话,点击链接进去或者是企业小程序直接展示web页面的功能。也这样会简单一点,而且也直接进了腾讯的页面,对版权来说更好一点(可取)

(2)、就是如实的用正则一一解析上面三块内容,如果是网站展示的话,可以直接解析最外面的div即可。(可取)

如果是小程序的话,也可以直接解析到最外面的div,然后利用小程序的插件wxParse插件,来解析html内容;(可取)

再或者一一解析里面的内容,然后返回给小程序页面(这稍微复杂,不建议采用)。

这里正则我就不展示了,如果有需要的话,可以在下面留言,我会再补充

 


下面放一下爬取要用到的工具类和完整代码

 

三、工具类

用到的工具类,请戳链接:https://blog.csdn.net/qq_27471405/article/details/104140618

 

四、完整代码



import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.common.apiV2.beans.HttpPojo;

import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



/**
 * Created by yjl on 2020-02-01.
 */
@Service("WuhanService")
public class WuhanService {
    public static void main(String[] args) {
        //getTxFactIndexData("0");
        //getTxFactIndexData("1");
        getTxFactSearchResultByTitle("0","病毒");
    }




    /**
     * 腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台 文章列表数据
     * @param pageNo 页码
     * @return
     */
    public static String getTxFactIndexData(String pageNo){
        //String url="https://vp.fact.qq.com/home";
        //String url="https://vp.fact.qq.com/loadmore?artnum=0&page=0&_=1580922845373&callback=jsonp0";
        String url="https://vp.fact.qq.com/loadmore";
        if(pageNo==null||"".equals(pageNo)){ //如果页码没有传,默认为第一页
            pageNo="0";
        }
        String jsonpNum = "jsonp"+pageNo;
        Map paramObj = new HashMap();
        paramObj.put("artnum","0");
        paramObj.put("page",pageNo);
        paramObj.put("_",System.currentTimeMillis());
        paramObj.put("callback",jsonpNum);

        //模拟请求
        HttpPojo httpPojo = new HttpPojo();
        httpPojo.setHttpHost("vp.fact.qq.com");
        httpPojo.setHttpAccept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
        httpPojo.setHttpConnection("keep-alive");
        httpPojo.setHttpUserAgent("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3724.8 Mobile Safari/537.36");
        httpPojo.setHttpReferer("https://vp.fact.qq.com/home");
        httpPojo.setHttpOrigin("https://vp.fact.qq.com/home");

        String htmlResult = httpSendGet(url, paramObj, httpPojo); //整个html页面
        //System.out.println(htmlResult);
        htmlResult = getRegContent(jsonpNum+"?\\((.*?)\\)$", htmlResult, 1);
        System.out.println(htmlResult);

        //遍历入库或者存redis等操作
        /*JSONObject dataJo = JSONObject.parseObject(htmlResult);
        String content = dataJo.getString("content");//拿到所有数据
        JSONArray array = JSONArray.parseArray(content);
        for (int i = 0; i < array.size(); i++) {
            JSONObject tripJo = JSONObject.parseObject(array.getString(i));
            String title = tripJo.getString("title");
            System.out.println("title:"+title);

            //入库操作
        }*/

        return htmlResult;
    }


    /**
     * 腾讯【新型冠状病毒肺炎实时辟谣】较真查证平台 根据关键词搜索文章列表
     * @param pageNo
     * @param titleText
     * @return
     */
    public static String getTxFactSearchResultByTitle(String pageNo,String titleText){
        String htmlResult="fail";
        try {
            //String url="https://vp.fact.qq.com/searchresult?title=%E7%97%85%E6%AF%92&num=0&_=1580925707024&callback=jsonp1";
            String url="https://vp.fact.qq.com/searchresult";
            if(pageNo==null||"".equals(pageNo)){ //如果页码没有传,默认为第一页
                pageNo="0";
            }
            String jsonpNum = "jsonp"+(Integer.parseInt(pageNo)+1);
            Map paramObj = new HashMap();
            paramObj.put("title", URLEncoder.encode(titleText, "utf-8"));
            paramObj.put("num",Integer.parseInt(pageNo)*20);
            paramObj.put("_",System.currentTimeMillis());
            paramObj.put("callback",jsonpNum);

            //模拟请求
            HttpPojo httpPojo = new HttpPojo();
            httpPojo.setHttpHost("vp.fact.qq.com");
            httpPojo.setHttpAccept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
            httpPojo.setHttpConnection("keep-alive");
            httpPojo.setHttpUserAgent("Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3724.8 Mobile Safari/537.36");
            httpPojo.setHttpReferer("https://vp.fact.qq.com/home");
            httpPojo.setHttpOrigin("https://vp.fact.qq.com/home");

             htmlResult = httpSendGet(url, paramObj, httpPojo); //整个html页面
            //System.out.println(htmlResult);
            htmlResult = getRegContent(jsonpNum+"?\\((.*?)\\)$", htmlResult, 1);
            System.out.println(htmlResult);

            //遍历入库或者存redis等操作
            /*JSONObject dataJo = JSONObject.parseObject(htmlResult);
            String content = dataJo.getString("content");//拿到所有数据
            JSONArray array = JSONArray.parseArray(content);
            for (int i = 0; i < array.size(); i++) {
                JSONObject tripJo = JSONObject.parseObject(array.getString(i));
                String source = tripJo.getString("_source");
                JSONObject sourceJo = JSONObject.parseObject(source);
                String title = sourceJo.getString("title");
                System.out.println("title:"+title);

                //入库操作
            }*/


        }catch (Exception e){
            e.printStackTrace();
        }
        return htmlResult;
    }



    /**
     * http请求
     * @param url
     * @param paramObj
     * @param httpPojo
     * @return
     */
    private static String httpSendGet(String url, Map paramObj, HttpPojo httpPojo){
        String result = "";
        String urlName = url + "?" + parseParam(paramObj);
        //System.out.println("urlName:"+urlName);
        BufferedReader in=null;
        try {

            URL realURL = new URL(urlName);
            URLConnection conn = realURL.openConnection();
            //伪造ip访问
            String ip = randIP();
            System.out.println("目前伪造的ip:"+ip);
            conn.setRequestProperty("X-Forwarded-For", ip);
            conn.setRequestProperty("HTTP_X_FORWARDED_FOR", ip);
            conn.setRequestProperty("HTTP_CLIENT_IP", ip);
            conn.setRequestProperty("REMOTE_ADDR", ip);
            conn.setRequestProperty("Host", httpPojo.getHttpHost());
            conn.setRequestProperty("accept", httpPojo.getHttpAccept());
            conn.setRequestProperty("connection", httpPojo.getHttpConnection());
            conn.setRequestProperty("user-agent", httpPojo.getHttpUserAgent());
            conn.setRequestProperty("Referer",httpPojo.getHttpReferer()); //伪造访问来源
            conn.setRequestProperty("Origin", httpPojo.getHttpOrigin()); //伪造访问域名
            conn.connect();
            Map> map = conn.getHeaderFields();
            for (String s : map.keySet()) {
                //System.out.println(s + "-->" + map.get(s));
            }
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += "\n" + line;
            }


        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (in!=null){
                try {
                    in.close();
                }catch (Exception e){
                    e.printStackTrace();
                }

            }
        }
        return result;
    }


    /**
     * 解析map
     * @param paramObj
     * @return
     */
    public static String parseParam(Map paramObj){
        String param="";
        if (paramObj!=null&&!paramObj.isEmpty()){
            for (Object key:paramObj.keySet()){
                String value = paramObj.get(key).toString();
                param+=(key+"="+value+"&");

            }
        }
        return param;
    }

    /**
     * 伪造ip地址
     * @return
     */
    public static String randIP() {
        Random random = new Random(System.currentTimeMillis());
        return (random.nextInt(255) + 1) + "." + (random.nextInt(255) + 1)
                + "." + (random.nextInt(255) + 1) + "."
                + (random.nextInt(255) + 1);
    }

    /**
     * 通过正则获取数据
     * @param reg
     * @param content
     * @param index
     * @return
     */
    public static String getRegContent(String reg,String content,int index){
        Pattern pattern = Pattern.compile(reg); 	// 讲编译的正则表达式对象赋给pattern
        Matcher matcher = pattern.matcher(content);
        String group="";
        while (matcher.find()){
            group= matcher.group(index);
            //System.out.println(group);
        }
        return group;
    }

}

 


更多其他系列:

https://blog.csdn.net/qq_27471405/category_9693036.html

你可能感兴趣的:(武汉疫情,武汉疫情,爬虫,辟谣)