热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

百度百科采集策略(如何能尽可能采集全所有词条)

一.分析若从分类开始:1.百科库中显示的分类是不全的,只有一些开放分类。2.一个分类的数量不固定,每一页最多显示30个。比如url:参数解析:

一.分析

  若从分类开始:

  1.百科库中显示的分类是不全的,只有一些开放分类

  2.一个分类的数量不固定,每一页最多显示30个。

  比如url:

   

 

  参数解析

                  https://baike.baidu.com/fenlei/此处替换分类

                  Limit:30  每个页最多显示30条。

                  Index:第几页。

                  Offset:下标。  此url显示的就是这个分类下 30到30+offset之间的词条。

  直接优化

                  上述例子,直接改成:

                  http://baike.baidu.com/fenlei/文化遗产?limit=999999999

                   即可显示此分类下所有的目前开放的词条。无须遍历一直遍历“下一页”标签。

         上述第1点:分类不全的问题。

         上述第2点:某一个分类下 词条不全的问题。

若从词条进行拓扑,往外蔓延,不能保证所有词条之间都是相通的。

         综上,我计划从分类和词条两个点同时出发,去统计所有的分类,再去统计所有的词条。

具体步骤如下:

二.步骤

1.分类出发

  先定义所有的一级分类。

   

 

  除了这些一级分类,还有两个需要额外单独考虑的:

           https://baike.baidu.com/art

           https://baike.baidu.com/science

  然后遍历这些一级分类,通过正则,提取所有a标签中的

   

  

  将这些可能的分类url全部规则化:

           http://baike.baidu.com/fenlei/?

  存到一个set集合中。

 

2.词条出发

  1.在遍历每一个词条的同时,同时也需要一个词条的set集合,找到一个词条的url就往set中add。

  具体情况:

        

  

         同样规则化:

                   https://baike.baidu.com/item/?

         存到这个集合中,其中每个词条有一个需要筛选的内容:

        

 

         这些词条标签也可能是分类,通过组装url:

                   https://baike.baidu.com/fenlei/政治人物.

         去访问看返回状态进行判断是否需要add到词条的set中。

  2.可以将https://baike.baidu.com/view/+数字,通过判断这个html是否返回正常进行上述操作。

三.汇总

  将分类中出现的词条,分类汇总到词条的set,和分类的set.

  将词条中出现的词条,分类汇总到词条的set,和分类的set.

  最后遍历分类set找词条add到词条的set,最后形成一个从词条和分类出发的词条set。

 

  最后再在每一个词条url中提取需要的内容。

 


推荐阅读
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
author-avatar
大魔王
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有