欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬取百度百科语料

程序员文章站 2024-02-19 18:16:22
...

python3爬取百度百科语料

前言

迫于毕业压力,开始自学NLP(在一个研究院读研,早早开始实习,然而实习公司部门没有能支撑写论文的项目,想想还是挺坑的????‍♂️),看了一些资料,决定先开始从词向量入门吧,然而没有好的中文语料,虽然*提供免费的中文语料,但是我看了一下,还要繁体转简体,巴拉巴拉的,并且国内用*毕竟少数,所以估计语料的质量也不咋地,想着我们日常比较常用百度,百度百科作为中文语料应该不错,本以为百度爸爸会开源给我们,然鹅是我想多了,还是自己爬取,做为小白的我,当然是先百度一波,参考一下大佬的代码咯,然后就发现了大佬苏神几年前写的,在这个基础上,稍微改动了一下,优化了一下爬取的内容。

思路

1.初始化一个百度百科词条的URL
2.模拟浏览器访问URL,爬取本页面需要的词条内容,并找出该页面内所有的站内链接(由于爬取的数据较多,沿用苏神的思路,将数据存在mongodb,个人也觉得芒果和python很搭,简直是无缝衔接)
3.将链接单独存于一个集合,为了保证速度,建立索引
4.用多线程在库里取链接爬数据
整体思路就是这样,还是比较清晰的吧

代码

代码在我的GitHub上,欢迎访问????
完整代码

一些细节

可能百度做了一些简单的防爬虫,需要模拟浏览器才能get到数据,python3还是非常人性化,满足一个懒人的习惯,只需要在get的时候加上一个headers就可以了,所谓人生苦短,我用python,headers的获取方法也比较简单,用谷歌浏览器,F12->Network->点击name下一个链接->Headers->找到User-Agent即可。
some tips:

[re.sub('[ \n\r\t\u3000]+', ' ', re.sub('<.*?>|\xa0', '', unescape(str(t))).strip()) for t in  text])#去除一些空格,对爬取的网页内容做简单处理
#\u3000 表示全角空白符,\xa0表示不间断空白符

使用re.sub()函数处理爬取的网页数据,简直是个神器呀,get到了。

结果

数据还在爬取中,爬了一下午,爬了6W余条,网速不给力????,数据估计比较大,不打算上传到GitHub上,建议自己动手试试。

结束语

开篇之作,有些废话连篇,打开写博客之路,强迫自己学习,希望顺利毕业????。
本博客代码参考苏神之作,原文链接????