网站信息的采集系列(二)--百度搜索内容的采集
发布日期:2022-02-24 11:35:56 浏览次数:7 分类:技术文章

本文共 1698 字,大约阅读时间需要 5 分钟。

本文实现在百度搜索栏中自动输入关键字搜索(以“二氧化碳人工合成淀粉”为例),并自动采集搜索的内容(自动点击下一页5次),采集内容包含文章标题,文章链接,文章的摘要,并显示在表中,有需要的话可以存储到excel中,效果如下图所示:

        为了能处理获取到的数据,首先使用QWebEngine做了一个简单的浏览器,输入地址即可进入指定网页,然后添加了显示采集结果的表,如有需要可以将表中的内容存储到excel中。

先用浏览器开发者工具查看下百度的搜索页面:

 

分析可知,本页显示的搜索结果在id=content_left的div中,真正需要的是类名为result的内容,id反而没什么用。

标题及链接位置:

摘要位置:

下一页位置:

主要的js代码:

//点击下一页的函数

function press_next(){                                      

    var next_elements = document.querySelectorAll('#page .n');

    if(next_elements){

        if(next_elements.length===1)

                 next_elements[0].click();

           else

                 next_elements[1].click();

      }                                                      

};

//获取搜索结果的函数

function get_result(){

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

      if(content_left){

        var can_press = false,i,cur_result,end_result;

        var start_index = window.press_counter*10 + 1;

        var end_index = (window.press_counter+1)*10;

        if(window.press_counter===0)end_index = end_index+1;

        for(i=start_index;i<=end_index;i++){

            cur_result = document.getElementById(i+'');

            end_result = document.getElementById(end_index+'');

            //防止id=11多次获取(第一点击下一页时,还停留在第一页的情况)

            if (!end_result)

                break;

            if(cur_result && cur_result.classList.contains('result')){

                //标题不会空

                var a_element = cur_result.querySelectorAll('.t a')[0];

                var title = a_element.innerText;//标题

                //连接

                var link = a_element.getAttribute('href');//文章连接

                title = title.split('...').join('');

                //摘要(可能会空)

                var abstract = '';

                var abstract_elements = cur_result.getElementsByClassName('c-abstract');//摘要

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

                    abstract = abstract_elements[0].innerText;

                    abstract = abstract.split('...').join('');

                }

            }

        }

    }

}    

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

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

input_element.value = 'keyword';

input_element = document.getElementById('su');      

input_element.click();

转载地址:https://blog.csdn.net/hulinhulin/article/details/121153206 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:网站信息的采集系列(一)--基本流程
下一篇:JS如何判断滚动条是否滚到底部

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月03日 15时53分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

matlab 曲线拟合求导,如何对matlab cftool拟合得到的cfit函数求导数 2019-04-21
matlab 50hzquchu,新手求消除50HZ工频干扰陷波滤波器源程序 2019-04-21
laravel没有route.php,Laravel中的RouteCollection.php中的NotFoundHttpException 2019-04-21
php服务端开启socket,php socket服务端能不能在网页端开启?而不是只能用CLI模式开启... 2019-04-21
php不需要也能输出,php 如何只输出最后生成的那个值?? 2019-04-21
php正则过滤sql关键字,使用正则表达式屏蔽关键字的方法 2019-04-21
php取整v,php取整方式分享 2019-04-21
php写模糊搜索api接口,php通过sphinxapi接口实现全文搜索 2019-04-21
oracle安装出现2932,【案例】Oracle报错ORA-19815 fast_recovery_area无剩余空间解决办法... 2019-04-21
rac数据库下oracle打小补丁,Oracle 11g RAC 环境打PSU补丁的详细步骤 2019-04-21
form表单属性名相同java_form表单提交时候有多个相同name 的input如何处理? 2019-04-21
java图片加气泡文字_图片加气泡文字 2019-04-21
java总结i o流_14.java总结I/O流 2019-04-21
java和历转为西历_日期转西暦,和暦 2019-04-21
java 远程 yarn jar_再论Yarn Client和Yarn cluster 2019-04-21
java单元测试断言_单元测试+断言 2019-04-21
java 创建压缩包_用Java创建ZIP压缩文件 2019-04-21
java typedarray_TintTypedArray.java 2019-04-21
java字符字面量_java – 字符串字面量的行为是令人困惑的 2019-04-21
php判断数组的值是否为空,PHP判断数组是否为空的常用方法(五种方法) 2019-04-21