CN110674377A - 基于爬虫的新闻热点词获取方法 - Google Patents
基于爬虫的新闻热点词获取方法 Download PDFInfo
- Publication number
- CN110674377A CN110674377A CN201910907545.3A CN201910907545A CN110674377A CN 110674377 A CN110674377 A CN 110674377A CN 201910907545 A CN201910907545 A CN 201910907545A CN 110674377 A CN110674377 A CN 110674377A
- Authority
- CN
- China
- Prior art keywords
- word
- news
- html
- webpage
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于爬虫的新闻热点词获取方法,包括:在新闻类别的搜索引擎上搜索关键词,获取搜索页的url;使用python语言,结合bs4和requests包抓取每一条的搜索结果以及下载每一页的静态html;再用goose抓取每个网页的标题和正文;使用chardet包、requests包和goose包的编码转换函数对标题和正文进行编码;将得到的每个网页的标题与正文根据时间归类成文档;将每个文档分别读入jieba分词进行分词,对得到的分词结果进行去停词以及删除使用停词表删不掉的特殊词,使用python的数据结构,即字典,进行词频统计并排序。本发明有用于新闻相关的工作者和数据分析相关的工作者。
Description
技术领域
本发明涉及数据分析、网络爬虫技术领域,特别是一种基于爬虫的新闻热点词获取方法。
背景技术
近年来,随着网络的迅速发展,万维网逐渐成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎,例如百度、谷歌,作为一个辅助人们检索信息的工具成为用户网上冲浪的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性——无法大量获取并分析定向信息。为了解决上述问题,定向抓取相关网页资源的网络爬虫技术应运而生。网路爬虫根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。
通常的技术方法是直接使用搜索引擎生成的url进行网页爬取,再进行人工的文本分析,寻找适用于大多爬取目标网页的规律,根据html标签筛选然后得到想要的内容。而这种方法的缺点在于,搜索引擎生成的url的搜索结果中包含广告等无用信息,会使得到的信息冗余,导致得到的数据不准确,影响数据分析结果。人工分析文本虽能适应网页的复杂变化,但总有冗余的信息,形成结构化文档成本高,导致很难批量处理,数据分析困难。
发明内容
为解决现有技术中存在的问题,本发明的目的是提供一种基于爬虫的新闻热点词获取方法,本发明利用搜索引擎中的新闻类别搜索来获取关键词相关的热点新闻词,有用于新闻相关的工作者和数据分析相关的工作者。
为实现上述目的,本发明采用的技术方案是:一种基于爬虫的新闻热点词获取方法,包括以下步骤:
步骤1、在新闻类别的搜索引擎上搜索关键词,获取搜索页的url;
步骤2、使用python语言,结合bs4和requests包抓取每一条的搜索结果以及下载每一页的静态html;
步骤3、根据抓取的静态html,用goose抓取每个网页的标题和正文;
步骤4、使用chardet包、requests包和goose包的编码转换函数对标题和正文进行编码;
步骤5、将得到的每个网页的标题与正文根据时间顺序归类成文档;
步骤6、将每个文档分别读入jieba分词进行分词,对得到的分词结果进行去停词以及删除使用停词表删不掉的特殊词,使用python的数据结构,即字典,进行词频统计并排序。
作为一种优选的实施方式,所述步骤1中,更改url中的参数cl和tn的值,使其利用新闻搜索引擎定向搜索新闻时过滤掉无用信息。
作为另一种优选的实施方式,所述步骤2中,通过改变headers的值,伪装成浏览器访问,具体包括:使用requests包抓取通过url搜索出来的静态页面的html;使用bs4抓取html中每一条结果对应url的静态html。
作为另一种优选的实施方式,所述步骤4具体如下:
使用chardet包中的chardet.detect(raw_html)检测网页使用的编码;使用raw_html.decode(charset['encoding']).encode('UTF-8')将网页的编码转换成UTF-8编码;如果抛出异常,那么网页为GBK编码,通过捕获异常的方式来对GBK编码进行转换。
作为另一种优选的实施方式,所述步骤6中,词频统计时,将得到的分词存储于python的字典中,具体包括:将词作为键,进行词频统计,若字典里还没有这个词语的键,则新增这样一个键,并将值设为1,若已有这个键,则将这个键对应的值加1;最后使用sorted函数对字典进行排序,以词频降序排列。
本发明的有益效果是:本发明利用百度搜索引擎的新闻搜索过滤,得到普通搜索改装后的url,用此url爬虫可以过滤掉非新闻的无用信息,减少信息的冗余;又利用goose进行每一条标题和正文的提取,放弃掉极个别复杂无法解析的网页,再通过python的文件操作,将爬取下来的文档结构化,文本结构化成本低,且对后续的数据分析提供便利。
附图说明
图1为本发明实施例流程框图;
图2为本发明实施例中某一天的分词结果;
图3为本发明实施例中一段时间抓取的数据所有的分词结果所形成的词云。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例
如图1所示,一种基于爬虫的新闻热点词获取方法,本实施例将python爬虫技术应用到百度搜索引擎搜索结果分析上。利用百度搜索引擎中的新闻类别搜索来获取关键词相关的热点新闻词。具体步骤如下:
(1)在新闻类别的搜索上搜索关键词,获取搜索页的url;
(2)使用的语言为python,结合bs4和requests抓取每一条的搜索结果以及下载每一页的静态html;
(3)根据抓取的静态html,用goose抓取每个网页的标题和正文;
(4)使用chardet包以及requests包和goose包的相关编码转换函数解决编码问题;
(5)将得到的每个网页的标题与正文根据时间归类成文档;
(6)将每个文件分别读入用jieba分词进行分词,对得到的分词结果进行去停词处理以及一些使用停词表删不掉的特殊词,使用python的一个数据结构--字典,进行词频统计,并排序。
上述步骤(1)中,传统爬虫直接使用搜索引擎的url,导致将搜索出来的广告等无用信息也爬取下来,影响之后的数据分析。本实施例的技术特征在于,更改了url中的参数cl和tn的值,使其利用百度的新闻搜索引擎定向搜索新闻,由此可以过滤掉广告等无用信息。
上述步骤(2)中,使用简单的反爬措施,通过改变headers的值,伪装成浏览器访问;使用requests包抓取通过url搜索出来的静态页面的html;使用bs4抓取html中每一条结果对应url的静态html。
上述步骤(3)中,在传统的网页解析,通常对网页进行人工解析,寻找文本间的规律,但网页变化多端,很难找到适应范围广的规律,所以会出现很多冗杂的信息,如友情链接,新闻作者。本实施例的技术特征在于,采用goose进行网页解析,goose在极个别的复杂结构的网页上无法解析,此时会返回空的结果,对于极个别的数据缺失不会影响到整个数据分析的结果。另一方面,goose可以很好的将每篇新闻的标题和正文与其他冗余信息隔离开来。对比人工解析,利远大于弊。
上述步骤(4)中,使用chardet包中的chardet.detect(raw_html)检测网页使用的编码;使用raw_html.decode(charset['encoding']).encode('UTF-8')将网页的编码转换成UTF-8编码;其中GBK编码比较特殊,如果上述处理抛出异常那么网页一定是GBK编码,通过捕获异常的方式来对GBK编码进行转换。传统的chardet编码解析,无法处理GBK编码,本实施例的技术特征在于,修复了chardet的问题,采用抛出异常的方式,当处理GBK编码时,捕获到抛出的异常对其单独进行解码与编码。
上述步骤(5)中,在具体实施时,按照日期将每天获取的数据分别放在一个文件夹里,文件夹命名为”YYYY-mm-dd”。文件夹中的文件由三个部分组成,第一部分为搜索出的前20条数据的源码文件,命名为”源码-x”(x为搜索结果的第x条);第二部分为通过源码文件解析出来的文件,命名为”content-x”,解析出的文件由两部分组成,首先是文章标题,接着两个换行符,然后是正文内容;第三部分为当天解析内容的分词结果,命名为”YYYY-mm-ddHH-MM-ss”。此目录结构使得python处理数据变得非常方便。
本实施例的技术特征在于,利用python的文件io操作,将当天的抓取内容放在命名为“YYYY-MM-dd”的文件夹中,文件夹中包含三部分文件,网页源码命名为“源码-x”,解析出的文本命名为“content-x”,x为文档序号,每天的词频统计命名为“YYYY-MM-ddHH-mm-ss词频统计”。解析出的文本文件的内容以标题+两个换行符+正文的格式储存。规范化文档,对数据分析带来巨大的好处,可以批量处理相同格式的数据,免去了很多麻烦。
上述步骤(6)中,首先使用python的jieba包进行分词;分词后删除停词;删除特殊词——‘’和‘\n’;词频统计时,将得到的词存于python的数据结构——字典,存储方法为,将词作为键,进行词频统计,若字典里还没有这个词语的键,则新增这样一个键,并将值设为1,若已有这个键,则将这个键对应的值加一;最后使用sorted函数对字典进行排序,以词频降序排列。
字典使用键访问,而键正好可以作为每个词,每个词的词频则对应相应的值,形成一个个键值对。字典的使用极大地简化了词频统计的工作。
下面以“中兴”关键词为例,检索其新闻热点词,包含代码,对本实施例作进一步地说明:
数据量:33x20=660项
抓取时间:2019.5.13–2019.6.14
抓取内容:前二十篇新闻的标题与正文
(1)从百度新闻类别搜索中,搜索“中兴”关键词,使用得到的url获取静态html:
http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=%E4%B8%AD%E5%85%B4;
(2)结合bs4和requests抓取每一条的搜索结果以及下载每一页的静态html:
html=requests.get(url).text
soup=BeautifulSoup(html,'lxml')
g=Goose({'User-Agent':'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/66.0.3359.139Safari/537.36','stopwords_class':StopWordsChinese})
headers={'User-Agent':'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/66.0.3359.139Safari/537.36'}
for i in range(1,21):
target=soup.find('div',attrs={'id':str(i)}).find('a')['href']
(3)根据抓取的静态html,用goose抓取每个网页的标题和正文:
article=g.extract(target)
(4)使用chardet包以及requests包和goose包的相关编码转换函数解决编码问题:
raw_html=request.urlopen(request.Request(target,headers=headers)).read()
charset=chardet.detect(raw_html)
try:
article=g.extract(raw_html=raw_html.decode(charset['encoding']).encode('UTF-8'))
except:
try:
article=g.extract(raw_html=raw_html.decode('GBK').encode('UTF-8'))
except:
continue
(5)将得到的每个网页的标题与正文根据时间归类成文档;
(6)将每个文件分别读入用jieba分词进行分词:
participle=jieba.cut(text,HMM=True)
对得到的分词结果进行去停词处理以及一些使用停词表删不掉的特殊词;
#去掉停词:
#participle_list为分词列表,stopw_list为停词列表
while i<=plist_len-1:
if participle_list[i]in stopw_list:
del participle_list[i]
plist_len-=1
continue
i+=1
#删除特殊词:
def del_specialword(count_dict):
if”in count_dict.keys():
del count_dict[”]
if'\n'in count_dict.keys():
del count_dict['\n']
return count_dict
使用python的一个数据结构——字典,进行词频统计,并排序:
count_dict={}
for path in file:
f=open(path,'r',encoding='utf-8')
text=f.read()
f.close()
participle=jieba.cut(text,HMM=True)
participle_list=del_stopword(participle)
count_dict=count(participle_list,count_dict)
count_dict=del_specialword(count_dict)
#给字典里的词频排序,变成列表:
count_list=sorted(count_dict.items(),key=lambda e:e[1],reverse=True)
如图2和图3所示,图2为采用实施例的某一天的分词结果;图3为采用本实施例一段时间抓取的数据所有的分词结果所形成的词云。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (5)
1.一种基于爬虫的新闻热点词获取方法,其特征在于,包括以下步骤:
步骤1、在新闻类别的搜索引擎上搜索关键词,获取搜索页的url;
步骤2、使用python语言,结合bs4和requests包抓取每一条的搜索结果以及下载每一页的静态html;
步骤3、根据抓取的静态html,用goose抓取每个网页的标题和正文;
步骤4、使用chardet包、requests包和goose包的编码转换函数对标题和正文进行编码;
步骤5、将得到的每个网页的标题与正文根据时间顺序归类成文档;
步骤6、将每个文档分别读入jieba分词进行分词,对得到的分词结果进行去停词以及删除使用停词表删不掉的特殊词,使用python的数据结构,即字典,进行词频统计并排序。
2.根据权利要求1所述的基于爬虫的新闻热点词获取方法,其特征在于,所述步骤1中,更改url中的参数cl和tn的值,使其利用新闻搜索引擎定向搜索新闻时过滤掉无用信息。
3.根据权利要求1所述的基于爬虫的新闻热点词获取方法,其特征在于,所述步骤2中,通过改变headers的值,伪装成浏览器访问,具体包括:使用requests包抓取通过url搜索出来的静态页面的html;使用bs4抓取html中每一条结果对应url的静态html。
4.根据权利要求1所述的基于爬虫的新闻热点词获取方法,其特征在于,所述步骤4具体如下:
使用chardet包中的chardet.detect(raw_html)检测网页使用的编码;使用raw_html.decode(charset['encoding']).encode('UTF-8')将网页的编码转换成UTF-8编码;如果抛出异常,那么网页为GBK编码,通过捕获异常的方式来对GBK编码进行转换。
5.根据权利要求1所述的基于爬虫的新闻热点词获取方法,其特征在于,所述步骤6中,词频统计时,将得到的分词存储于python的字典中,具体包括:将词作为键,进行词频统计,若字典里还没有这个词语的键,则新增这样一个键,并将值设为1,若已有这个键,则将这个键对应的值加1;最后使用sorted函数对字典进行排序,以词频降序排列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910907545.3A CN110674377A (zh) | 2019-09-24 | 2019-09-24 | 基于爬虫的新闻热点词获取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910907545.3A CN110674377A (zh) | 2019-09-24 | 2019-09-24 | 基于爬虫的新闻热点词获取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110674377A true CN110674377A (zh) | 2020-01-10 |
Family
ID=69078900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910907545.3A Pending CN110674377A (zh) | 2019-09-24 | 2019-09-24 | 基于爬虫的新闻热点词获取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110674377A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111667248A (zh) * | 2020-06-10 | 2020-09-15 | 李文竹 | 基于大数据分析的个性化教育管理系统、方法、介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880607A (zh) * | 2011-07-15 | 2013-01-16 | 舆情(香港)有限公司 | 网络动态内容抓取方法及网络动态内容爬虫系统 |
CN104361021A (zh) * | 2014-10-21 | 2015-02-18 | 小米科技有限责任公司 | 网页编码识别方法及装置 |
-
2019
- 2019-09-24 CN CN201910907545.3A patent/CN110674377A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880607A (zh) * | 2011-07-15 | 2013-01-16 | 舆情(香港)有限公司 | 网络动态内容抓取方法及网络动态内容爬虫系统 |
CN104361021A (zh) * | 2014-10-21 | 2015-02-18 | 小米科技有限责任公司 | 网页编码识别方法及装置 |
Non-Patent Citations (4)
Title |
---|
林文涛等: "面向热点新闻的爬虫系统设计与实现", 《数字通信世界》 * |
蒋加伏: "《Python程序设计基础》", 31 August 2019, 北京邮电大学出版社 * |
赵广辉: "《Python语言及其应用》", 31 January 2019, 中国铁道出版社 * |
黑马程序员: "《解析Python网络爬虫:核心技术、Scrapy框架、分布式爬虫》", 31 July 2018, 中国铁道出版社 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111667248A (zh) * | 2020-06-10 | 2020-09-15 | 李文竹 | 基于大数据分析的个性化教育管理系统、方法、介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6289342B1 (en) | Autonomous citation indexing and literature browsing using citation context | |
US8452766B1 (en) | Detecting query-specific duplicate documents | |
CN103136360B (zh) | 一种互联网行为标注引擎及对应该引擎的行为标注方法 | |
Urvoy et al. | Tracking web spam with html style similarities | |
KR100505848B1 (ko) | 검색 시스템 | |
US20070294252A1 (en) | Identifying a web page as belonging to a blog | |
WO2008098502A1 (fr) | Procédé et dispositif destinés à créer un index et procédé et système de récupération | |
CN102789464B (zh) | 基于语意识别的自然语言处理方法、装置和系统 | |
CN104715064A (zh) | 一种实现在网页上标注关键词的方法和服务器 | |
CN108446333B (zh) | 一种大数据文本挖掘处理系统及其方法 | |
Robertson et al. | Information retrieval research | |
KR102107474B1 (ko) | 크롤링을 통한 사회이슈 도출 시스템 및 그 도출 방법 | |
Kumar et al. | Near-duplicate web page detection: an efficient approach using clustering, sentence feature and fingerprinting | |
CN103425742A (zh) | 一种网站的搜索方法和装置 | |
CN114117242A (zh) | 数据查询方法和装置、计算机设备、存储介质 | |
CN110674377A (zh) | 基于爬虫的新闻热点词获取方法 | |
WO2007121105A2 (en) | Systems and methods for predicting if a query is a name | |
US20030018617A1 (en) | Information retrieval using enhanced document vectors | |
Narayana et al. | A novel and efficient approach for near duplicate page detection in web crawling | |
CN100357942C (zh) | 一种移动互联网智能信息搜索引擎的搜索方法 | |
Liu et al. | Digging for gold on the Web: Experience with the WebGather | |
Sluban et al. | URL Tree: Efficient unsupervised content extraction from streams of web documents | |
CN113051907B (zh) | 一种新闻内容的查重方法、系统及装置 | |
CN112989163A (zh) | 一种垂直搜索方法和系统 | |
Qiu et al. | Detection and optimized disposal of near-duplicate pages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200110 |