热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

本文实现在百度新闻搜索栏中自动输入关键字搜索(以“军事”为例),并自动采集搜索的内容,采集内容包含新闻标题,链

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

 

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

            //标题和链接

            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 <&#61;mypages){

                jscode &#61; *获取网页的内容代码*l

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

                this->currentPage &#61; _curPage &#43; 1;

            }

        }

    }


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
author-avatar
liuxiaoli8611
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有