网站信息采集系列(五)--百度新闻

13 篇文章 0 订阅
6 篇文章 0 订阅

本文实现在百度新闻搜索栏中自动输入关键字搜索(以“军事”为例),并自动采集搜索的内容,采集内容包含新闻标题,链接,来源,时间,摘要,并显示在表中,并将效果如下图所示:

 

1.网页分析

关键字搜索框及点击按钮

直接使用ID来确定,比较方便。

搜索到的内容:

里面的内容比较多,需要找下,下面直接贴代码。

2.主要代码

输入关键字并点击搜索按钮

var input_element = document.getElementById('ww');

input_element.value = 'mykeyword';

input_element = document.getElementById('s_btn_wr');

input_element.click();

获取页面指定内容

var contentElement = document.getElementById('content_left');

if (contentElement){

    var newsElements = contentElement.getElementsByClassName('result-op');

    if (newsElements && newsElements.length > 0){

        for (var i = 0;i < newsElements.length;i ++){

            //标题和链接

            var title = '',link = '';

            var titleElements = newsElements[i].querySelectorAll('h3 a');

            if (titleElements && titleElements.length > 0){

                link = titleElements[0].getAttribute('href');

                title = titleElements[0].innerText;

            }

            //来源,时间

            var time = '',source = '';

            var tsElements = newsElements[i].querySelectorAll('.c-row .c-span-last .news-source_Xj4Dv  span');

            if (tsElements && tsElements.length > 1){

                source = tsElements[0].innerText;

                time   = tsElements[1].innerText;

            }

            //摘要

            var abstract = '';

            var absElements = newsElements[i].querySelectorAll('.c-row .c-span-last > span');

            if (absElements && absElements.length > 0)

                abstract = absElements[0].innerText;

        }

        /*点击下一页*/

        var nextAElements = document.querySelectorAll('#page .page-inner a');

        if (nextAElements){

            nextAElements[nextAElements.length - 1].click();

        }

    }

}

3 翻页控制

点击下一页时,网页会释放窗口,然后再创建新窗口,因此翻页控制不能在当前窗口中进行,必须由主程序控制(我这里是QT),具体是在网页导入完成后再确定是否翻页,代码如下:

    if (_urlStr.contains("baidu.com/s") && _urlStr.contains("tn=news")){

        int _curPage = 0;

        //如果没有key=pn的值,表示是第一页

        if (_urlQuery.hasQueryItem("pn"))

            _curPage = _urlQuery.queryItemValue("pn").toInt() / 10;

        else

            _curPage = this->currentPage = 0;

        //只有当前翻页次数与this->currentPage相等时才能获取信息

        //baidu_news-2.js里面会点击一次下一页

        if (_curPage == this->currentPage){

            //小于用户设置的翻页次数

            if (this->currentPage <=mypages){

                jscode = *获取网页的内容代码*l

                webView->page()->runJavaScript(jscode,[&](const QVariant&){});

                this->currentPage = _curPage + 1;

            }

        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视图猿人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值