继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

利用爬虫做词云分析

冉冉说
关注TA
已关注
手记 324
粉丝 42
获赞 194

首先跟大家解释下,为什么更新的是关于爬虫的内容而不是open.cv。因为小编想继承上一篇帖子(python数据可视化之WordCloud)的内容,上篇帖子只是简单的介绍了wordcloud的安装和使用方法,但是应用部分却没有怎么提及。今天,我们用爬虫来获取网页,然后再用word cloud做词云分析。

一、爬虫框架的搭建
1.1网络爬虫的基本思路
爬虫的目的是获取网页的信息,一般的应用就是搜索引擎了。今天小编就以爬取搜狐新闻为例跟大家聊聊爬虫的这些事儿。我们一般是通过requests库向web提出请求,然后通过BeautifulSoup库对页面内容进行解析,再次是利用正则表达式对获取的页面内容进行详解和筛选关键信息。具体的流程如下图:

https://img1.mukewang.com/5d53797500014b5507180424.jpg

爬虫1.PNG


安装requests库的方法:只需在命令行输入:“pip install requests”即可,这次我们用到的库一共是5个:requests、BeautifulSoup、jieba、re(re是python的内置模块,无需安装)、WordCloud。前三种库的安装方法同requests是一样的,所以小编就不赘述,WordCloud的安装参考这篇帖子
requests库的使用方法很简单,也很容易掌握,主要的方法如下:


https://img4.mukewang.com/5d537978000163c108950320.jpg

爬虫2.PNG


接下来,小编介绍下jieba库的使用:jieba是优秀的中文分词第三方库,中文文本需要通过分词来获得单个词语,它提供三种分词模式,主要是依靠中文词库,除了分词,用户还可以自定义添加词组。总的来说,jieba的分词要点就是:jieba.lcut(txt)。
二、实例
2.1 构造请求,获取页面内容进行解析
第一步我们需要构造请求,获取页面内容,具体的代码如下:

import requestsfrom bs4 import BeautifulSoup
url = "https://www.sohu.com/a/226127592_139908"responce = requests.get(url)
soup = BeautifulSoup(responce.text,'lxml')    #lxml用来解析网页responce.status_code    #如果返回值为200则表示访问成功

2.2抓取页面,获取关键信息
我们需要进入开发者模式(一般是按F12或者是单击鼠标右键选择“检查//审查元素”选项卡),找到我们的想要的对象,这时对应的HTML源码部分就会变蓝,具体的操作如下图:

https://img1.mukewang.com/5d5379840001e7df01910576.jpg

示例1.gif


我们的目标是获取2017年度政府报告的全文,注意到这部分文本在 article类的article标签下,可以利用BeautifulSoup模块下的find函数进行查找,即

links_div = soup.find("article",class_="article")#links_div     我们可以尝试输出下获取的文本,验证是否是我们想要的text = links_div.strip()   #对字符串进行切片操作

2.3 接下来,我们把得到的页面内容作为对象保存到字典中,然后再写入到本地的记事本中

dic = {text}with open("C:\\Users\qinglifang\\Desktop\\pictures\\report.txt",'a',encoding='utf-8')as f:
    f.write(str(dic))
f.close()

2.4 然而,我们注意到获取的页面内容中有html的标签和其他符号存在,不利于下一步的词云操作,所以需要利用jieba和正则表达式对得到的文本进行清洗。

import jiebaimport re
r ='[,。\%、;1234567890n]'file=open("report.txt","r",encoding='utf-8').read()
file =re.sub(r,'',file)      #剔除无关信息con = jieba.lcut(file)     #分词words = " ".join(con)    #分词后插入空格

2.5词云分析

from wordcloud import WordCloud
wordcloud = WordCloud(font_path="simkai.ttf",background_color="white",width=800, height=660).generate(words) 
#我们注意到wordcloud对中文很不友好,必须要进行jieba分词,还应该再WordCloud中增加设置字体的参数#否则生成的词云图片是方框型的wordcloud.to_file('pic.png')     #保存图片

2.6结果展示


https://img2.mukewang.com/5d53799400017bae07840589.jpg

pic.png

三、小结
有的网站增加了反爬虫的识别功能,这时我们需要修改requests的头文件。再者就是做爬虫时,我们应该遵循目标网站的robots协议。感兴趣的同学们,可以自己试着爬取一些网上商品的信息或者其他有趣的网页内容。在小编的下一篇帖子中,会为大家正式介绍open.cv的强大功能。
创作不易,喜欢我就点个赞吧。
(本文原创,如需引用,请注明出处)



作者:氢立方
链接:https://www.jianshu.com/p/605ab76c9fb0


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP