怎么用python爬小说统计词频_python小练习爬取《寻梦环游记》评论并做词频统计...

本来其实是想爬豆瓣电影上10几万条评论的,但后来ip被封了,换代理ip之类的还不熟练,还在学习中,所以先做时光网上10页评论的分析吧,虽然时光网上粗粗一看评论就短了很多,水了很多。主要是继续练习BeautifulSoup的应用以及将爬取的内容内容保存到本地后做简单的分词和词频分析。

from urllib import request

from bs4 import BeautifulSoup

url='http://movie.mtime.com/227434/reviews/short/new.html'

url2='http://movie.mtime.com/227434/reviews/short/new-{}.html'

with open('Coco.txt','w',encoding='utf-8') as outputfile:

req=request.Request(url)

content=request.urlopen(req).read().decode('utf8')

soup=BeautifulSoup(content,'html.parser')

comments=soup.find_all('h3')

for comment in comments:

word=comment.get_text()

print(word)

outputfile.write('{} \n'.format(word))

这次的爬虫比较简单,首先观察时光网上《寻梦环游记》的评论页的URL,除了第一页是new.html以外,后续的分别是new-2.html,new-3.html以此类推,所以就可以用比较笨的办法就是第一页先单独爬,然后后面2-10页,可以循环网址链接,只需要改个new-后面的数字就行了。

同时通过F12观察,时光网的评论全部包裹在

标签中,则只需要find所有的h3标签,取出标签间的文本即是所要的评论了所以以上是第一部分。

第二部分其实完全相同,只不过添加了format函数,来循环网址,所以完整代码如下,with open的话会将其保存在python默认位置,我们将其命名为Coco.txt

from urllib import request

from bs4 import BeautifulSoup

url='http://movie.mtime.com/227434/reviews/short/new.html'

url2='http://movie.mtime.com/227434/reviews/short/new-{}.html'

with open('Coco.txt','w',encoding='utf-8') as outputfile:

req=request.Request(url)

content=request.urlopen(req).read().decode('utf8')

soup=BeautifulSoup(content,'html.parser')

comments=soup.find_all('h3')

for comment in comments:

word=comment.get_text()

print(word)

outputfile.write('{} \n'.format(word))

i=2

while i<11:

url_visit=url2.format(i)

req2=request.Request(url_visit)

content2=request.urlopen(req2).read().decode('utf8')

soup2=BeautifulSoup(content2,'html.parser')

comments2=soup2.find_all('h3')

i=i+1

for comment2 in comments2:

word2=comment2.get_text()

print(word2)

outputfile.write('{} \n'.format(word2))

得到了txt数据以后通过open方法读取进来,随后利用jieba分词库进行词频统计

import jieba

coco = open('C:\\Users\\Administrator\\Coco.txt',encoding='utf-8').read()

coco_words = [x for x in jieba.cut(coco) if len(x) >= 2]

from collections import Counter

c = Counter(coco_words).most_common(20)

print(c)

在这里简单介绍下jieba中文分词库,有精确模式,全模式和搜索模式三种,此处默认用了精确模式,len(x)>=2是去掉对标点符号的分词,随后引入counter类,来求出现频次最多的前20个词语,结果如下:

显然我们可以看到感人,感动是其中的高频词汇,无愧是今年最感人动画片!

当然这里后续还可以结合wordcloud库形成词云,或者将其导入BDP中做进一步的可视化,这个可以在后续的笔记中继续边学边记录。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值