本来其实是想爬豆瓣电影上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中做进一步的可视化,这个可以在后续的笔记中继续边学边记录。