ython从零到壹十网络爬虫之elenium爬取在线百科知识万字详解(语料构造必备)腾讯云开发者社区

随着互联网和大数据的飞速发展,我们需要从海量信息中挖掘出有价值的信息,而在收集这些海量信息过程中,通常都会涉及到底层数据的抓取构建工作,比如多源知识库融合、知识图谱构建、计算引擎建立等。其中具有代表性的知识图谱应用包括谷歌公司的Knowledge Graph、Facebook推出的实体搜索服务(Graph Search)、百度公司的百度知心、搜狗公司的搜狗知立方等。这些应用的技术可能会有所区别,但相同的是它们在构建过程中都利用了Wikipedia、百度百科、互动百科等在线百科知识。所以本章将教大家分别爬取这三大在线百科。

百科是指天文、地理、自然、人文、宗教、信仰、文学等全部学科的知识的总称,它可以是综合性的,包含所有领域的相关内容;也可以是面向专业性的。接下来将介绍常见的三大在线百科,它们是信息抽取研究的重要语料库之一。

“Wikipedia is a free online encyclopedia with the aim to allow anyone to edit articles.” 这是Wikipedia的官方介绍。Wikipedia是一个基于维基技术的多语言百科全书协作计划,用多种语言编写的网络百科全书。Wikipedia一词取自于该网站核心技术“Wiki”以及具有百科全书之意的“encyclopedia”共同创造出来的新混成词“Wikipedia”,接受任何人编辑。

在所有在线百科中,Wikipedia知识准确性最好,结构化最好,但是Wikipedia本以英文知识为主,涉及的中文知识很少。在线百科页面通常包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。Wikipedia中实体“黄果树瀑布”的中文页面信息如图1所示。

图1所示的Wikipedia信息主要包括:

百度百科是百度公司推出的一部内容开放、自由的网络百科全书平台。截至2017年4月,百度百科已经收录了超过1432万的词条,参与词条编辑的网友超过610万人,几乎涵盖了所有已知的知识领域。

百度百科旨在创造一个涵盖各领域知识的中文信息收集平台。百度百科强调用户的参与和奉献精神,充分调动互联网用户的力量,汇聚广大用户的头脑智慧,积极进行交流和分享。同时,百度百科实现与百度搜索、百度知道的结合,从不同的层次上满足用户对信息的需求。

与Wikipedia相比,百度百科所包含中文知识最多最广,但是准确性相对较差。百度百科页面也包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。图2为百度百科“Python”网页知识,该网页的消息盒为中间部分,采用键值对(Key-value Pair)的形式,比如“外文名”对应的值为“Python”,“经典教材”对应的值为“Head First Python”等。

相对于百度百科而言,互动百科的准确性更高、结构化更好,在专业领域上知识质量较高,故研究者通常会选择互动百科作为主要语料之一。图3显示的是互动百科的首页。

互动百科的信息分为两种形式存储,一种是百科中结构化的信息盒,另一种是百科正文的自由文本。对于百科中的词条文章来说,只有少数词条含有结构化信息盒,但所有词条均含有自由文本。信息盒是采用结构化方式展现词条信息的形式,一个典型的百科信息盒展示例子如图4,显示了Python的InfoBox信息,采用键值对的形式呈现,比如Python的“设计人”为“Guido van Rossum”。

下面分别讲解Selenium技术爬取三大在线百科的消息盒,三大百科的分析方法略有不同。Wikipedia先从列表页面分别获取20国集团(简称G20)各国家的链接,再依次进行网页分析和信息爬取;百度百科调用Selenium自动操作,输入各种编程语言名,再进行访问定位爬取;互动百科采用分析网页的链接url,再去到不同的景点进行分析及信息抓取。

百度百科作为最大的中文在线百科或中文知识平台,它提供了各行各业的知识,可以供研究者从事各方面的研究。虽然词条的准确率不是最好,但依然可以为从事数据挖掘、知识图谱、自然语言处理、大数据等领域的学者提供很好的知识平台。

本小节将详细讲解Selenium爬取百度百科消息盒的例子,爬取的主题为10个国家5A级景区,其中景区的名单定义在TXT文件中,然后再定向爬取它们的消息盒信息。其中网页分析的核心步骤如下:

(1) 调用Selenium自动搜索百科关键词

首先,调用Selenium技术访问百度百科首页,网址为:

然后,在浏览器鼠标选中“进入词条”按钮,右键鼠标点击“审查元素”,可以查看该按钮对应的HTML源代码,如图6所示。注意,不同浏览器查看网页控件或内容对应源代码的称呼是不同的,图中使用的是360安全浏览器,称呼为“审查元素”,而Chrome浏览器称为“检查”,QQ浏览器称为“检查”等。

“进入词条”对应的HTML核心代码如下所示:

调用Selenium函数可以获取输入框input控件。

然后自动输入“故宫”,获取按钮“进入词条”并自动点击,这里采用的方法是在键盘上输入回车键即可访问“故宫”界面,核心代码如下所示:

(2) 调用Selenium访问“故宫”页面并定位消息盒

第一步完成后,进入“故宫”页面然后找到中间消息盒InfoBox部分,右键鼠标并点击“审查元素”,返回结果如图7所示。

消息盒核心代码如下:

消息盒主要采用<属性-属性值>的形式存储,详细概括了“故宫”实体的信息。例如,属性“中文名称”对应值为“北京故宫”,属性“外文名称”对应值为“Fobidden City”。对应的HTML部分源代码如下。

整个消息盒位于< div class=“basic-info J-basic-info cmn-clearfix” >标签中,接下来是< dl >、< dt >、< dd >一组合HTML标签,其中消息盒div布局共包括两个< dl >…</ dl >布局,一个是记录消息盒左边部分的内容,另一个< dl >记录了消息盒右部分的内容,每个< dl >标签里再定义属性和属性值,如图8所示。

注意:使用dt、dd最外层必须使用dl包裹,< dl >标签定义了定义列表(Definition List),< dt >标签定义列表中的项目,< dd >标签描述列表中的项目,此组合标签叫做表格标签,与table表格组合标签类似。

接下来调用Selenium扩展包的find_elements_by_xpath()函数分别定位属性和属性值,该函数返回多个属性及属性值集合,再通过for循环输出已定位的多个元素值。代码如下:

此时,使用Selenium技术爬取百度百科国家5A级景区的分析方法就讲解完了,下面是这部分完整的代码及一些难点。

注意,接下来我们尝试定义多个Python文件相互调用实现爬虫功能。完整代码包括两个文件,即:

比如爬取过程Firefox浏览器会自动搜索“故宫”页面,如下图所示:

最终输出结果如下图所示:

内容如下:

上述代码属性和属性值通过字典进行组合输出的,核心代码如下:

同时,读者可以尝试调用本地的无界面浏览器PhantomJS进行爬取的,调用方法如下:

课程作业:

在线百科是互联网中存在公开的最大数据量的用户生成数据集合,这些数据具有一定的结构,属于半结构化数据,最知名的三大在线百科包括Wikipedia 、百度百科、互动百科。首先,作者将介绍Selenium爬取Wikipedia的实例。

第一个实例作者将详细讲解Selenium爬取20国家集团(G20)的第一段摘要信息,具体步骤如下:

(1) 从G20列表页面中获取各国超链接

20国集团列表网址如下,Wikipedia采用国家英文单词首写字母进行排序,比如“Japan”、“Italy”、“Brazil”等,每个国家都采用超链接的形式进行跳转。

首先,需要获取20个国家的超链接,然后再去到具体的页面进行爬取。选中一个国家的超链接,比如“China”,右键鼠标并点击“检查”按钮,可以获取对应的HTML源代码,如下所示。

其中超链接位于< div class=“mw-category-group” >布局的< ul >< li >< a >节点下,对应代码:

调用Selenium的find_elements_by_xpath()函数获取节点class属性为“mw-category-group”的超链接,它将返回多个元素。定位超链接的核心代码如下:

此时将获取的超链接存储至变量中如下图,再依次定位到每个国家并获取所需内容。

(2) 调用Selenium定位并爬取各国页面消息盒

接下来开始访问具体的页面,比如中国:

如图所示,可以看到页面的URL、标题、摘要、内容、消息盒等,其中消息盒在途中右部分,包括国家全称、位置等。

下面采用<属性-属性值>对的形式进行描述,很简明精准地概括了一个网页实体,比如<首都-北京>、<人口-13亿人>等信息。通常获取这些信息之后,需要进行预处理操作,之后才能进行数据分析,后面章节将详细讲解。

访问到每个国家的页面后,接下来需要获取每个国家的第一段介绍,本小节讲解的爬虫内容可能比较简单,但是讲解的方法非常重要,包括如何定位节点及爬取知识。详情页面对应的HTML核心部分代码如下:

浏览器审查元素方法如图所示。

正文内容位于属性class为“mw-parser-output”的< div >节点下。在HTML中,< P >标签表示段落,通常用于标识正文,< b >标签表示加粗。获取第一段内容即定位第一个< p >节点即可。核心代码如下:

注意,正文第一段内容位于第二个< p >段落,故获取p[2]即可。同时,如果读者想从源代码中获取消息盒,则需获取消息盒的位置并抓取数据,消息盒(InfoBox)内容在HTML对应为如下节点,记录了网页实体的核心信息。

其中,爬取的信息如图所示。

PS:该部分大家简单尝试即可,更推荐爬取百度百科、互动百科和搜狗百科。

几年过去,互动百科变成了快懂百科,但还好网页结构未变化。

本小节将讲解一个爬取互动百科最热门的十个编程语言页面的摘要信息,通过该实例加深读者使用Selenium爬虫技术的印象,更加深入地剖析网络数据爬取的分析技巧。不同于Wikipedia先爬取词条列表超链接再爬取所需信息、百度百科输入词条进入相关页面再进行定向爬取,互动百科采用的方法是:

由于互动百科搜索不同词条对应的超链接是存在一定规律的,即采用 “常用url+搜索的词条名” 方式进行跳转,这里我们通过该方法设置不同的词条网页。具体步骤如下:

(1) 调用Selenium分析URL并搜索互动百科词条

我们首先分析互动百科搜索词条的一些规则,比如搜索人物“贵州”,对应的超链为:

对应页面如图所示,从图中可以看到,顶部的超链接URL、词条为“贵州”、第一段为“贵州”的摘要信息、“右边为对应的图片等信息。

同理,搜索编程语言“Python”,对应的超链接为:

可以得出一个简单的规则,即:

可以搜索对应的知识,如编程语言“Java”对应为:

(2) 访问热门Top10编程语言并爬取摘要2016年,Github根据各语言过去12个月提交的PR数量进行排名,得出最受欢迎的Top10编程语言分别是:JavaScript、Java、Python、Ruby、PHP、C++、CSS、C#、C和GO语言。

然后,需要分布获取这十门语言的摘要信息。在浏览器中选中摘要部分,右键鼠标点击“审查元素”返回结果如图所示,可以在底部看到摘要部分对应的HTML源代码。

新版本的“快懂百科”内容如下图所示:

“Java”词条摘要部分对应的HTML核心代码如下所示:

调用Selenium的find_element_by_xpath()函数,可以获取摘要段落信息,核心代码如下。

这段代码的基本步骤是:

下面是完整的代码及详细讲解。

程序成功抓取了各个编程语言的摘要信息,如下图所示:

同时将数据存储至本地TXT文件中,这将有效为NLP和文本挖掘进行一步分析提供支撑。

写到这里,几种常见的百科数据抓取方法就介绍完毕了,希望您喜欢。

在线百科被广泛应用于科研工作、知识图谱和搜索引擎构建、大小型公司数据集成、Web2.0知识库系统中,由于其公开、动态、可自由访问和编辑、拥有多语言版本等特点,它深受科研工作者和公司开发人员的喜爱,常见的在线百科包括Wikipedia、百度百科和互动百科等。

本文结合Selenium技术分别爬取了Wikipedia的段落内容、百度百科的消息盒和互动百科的摘要信息,并采用了三种分析方法,希望读者通过该章节的案例掌握Selenium技术爬取网页的方法。

Selenium用得更广泛的领域是自动化测试,它直接运行在浏览器中(如Firefox、Chrome、IE等),就像真实用户操作一样,对开发的网页进行各式各样的测试,它更是自动化测试方向的必备工具。希望读者能掌握这种技术的爬取方法,尤其是目标网页需要验证登录等情形。

THE END
0.百度百科的微博百度在线网络技术(北京)有限公司 ü审核时间 2025-07-22 Ü简介: 百度百科,全球领先的中文网络百科全书。世界很复杂,百度更懂你。 T友情链接百度百科首页百科博物馆计划图解百科-V百科百科蝌蚪团主页百科校园-燃梦计划百科投诉中心 更多a 子品牌 b1/2a jvzq<84v0uooc7hqo0io1kfkfwhbktj1rtugkuj
1.百度百科和维基百科比差在哪里?(原标题:百度百科和维基百科比差在哪里?) 文/彭松(微信公众号:笔戈科技) 截止到2015年5月,百度百科已经收录了超过1155万词条,是国内最大的网络百科全书平台,也是绝大多数人的信息收集平台之一。 但是,有对比才知好坏,与全球最大的维基百科相比,百度百科还是图样图森破。 jvzquC41vgii0:;50eun1::1347419=1DCSWHW5P226:3>GH0jznn
2.新中国第一套少儿百科全书:经典能否“复活”?新闻频道1991年“六一”儿童节前夕,《中国少年儿童百科全书》正式出版。 80后、90后的“百度百科” “好的选题不一定能出好书,好书不一定有销路,这在出版界很常见。”当年的编委、浙江教育出版社副总编辑邱连根说。 他们做了最坏的心理准备。没想到,热销空前,到今天累计销售了300多万套。据工作人员回忆,那些年,卡车在印刷厂jvzquC41pg}t0lhvx0ipo872395188531CXUKyS7:mon7{Hk5vTuEyYdX3=18960ujznn
3.JavaWebHTTP状态码100200300400500600的含义六、6xx 600 Unparseable Response Headers源站没有返回响应头部,只返回实体内容。 以上内容仅为学习交流使用,请勿用作商业用途! 【参考资料】 1、图书:《图解HTTP》 2、百度百科:HTTP状态码 版权归原作者所有,如有侵权请立即与博主联系,将会及时处理! 完结!jvzquC41dnuh0lxfp0tfv8|gkzooa=94;;6398ftvkimg8igvcomu862:4?83<:
4.辅佐官S1&S2观感(辅佐官:改变世界的人们)剧评知识点背景阅读摘自“韩国国会”词条百度百科:韩国国会通过全民选举产生,有议员300名,任期4年。其中全民选举的议员占三分之二,即有224名议员是通过全民选举产生的,75名议员是按比例分配的。所谓比例分配,就是按比例分配给在直接选举中获得5个或5个以上席位的政党。这些按比例分配的议员又称作“全国区议员”。韩国对jvzquC41oq|jg7iqwdgo0lto1tkwkn|134:229:31