开头提醒
本次爬取的是用户评论,只供学习使用,不会进行数据的传播。希望大家合法利用爬虫。
获得数据
#总程序
import requests
from fake_useragent import UserAgent
import timefu=UserAgent()headers={'User-Agent':fu.random
}page_list=range(0,10)
#爬取10页的数据;需要的时间会很久
for page in page_list:#这些参数最后是拼接到?后面构成URL的参数params={'start':20*page,'sort':'time'}url="https://movie.douban.com/subject/1889243/reviews"req=requests.get(url,params=params,headers=headers)time.sleep(3)html=etree.HTML(req.text)#将获得的数据变成HTML格式id_list=html.xpath('//div[@class="main review-item"]/@id')#xpath比较容易提取需要的数据,学习也简单comment_results=[]#评论是折叠的,通过点击超链接,我们会在一个新的连接#发现这个评论,读取这个里面的全部评论#观察一下url我们就知道如何去读取这个数据了for id in id_list:url='https://movie.douban.com/review/'+id+'/'id_req=requests.get(url,headers=headers)id_html=etree.HTML(id_req.text)id_comment_list=id_html.xpath('//div[@class="review-content clearfix"]/p/text()')comment_results.append(id_comment_list)time.sleep(3)for comment in comment_results:with open('/Users/oommnn/Desktop/学习笔记/爬虫项目/星际穿越电影评论.txt','a+',encoding='utf-8') as f:#print(str(comment))#获得的是list;转为str类型#但是有的评论有多个p,不能单纯的只取第一项for com in comment:f.write(com)if req.status_code == 200:print(f"爬取第{page}页成功")print("爬取结束")
可视化处理
注:一般形容词可以让我们了解人们对这部电影的评价
#可视化处理
import jieba.analyse
import wordcloudwith open('你的文件地址','r',encoding='utf-8') as f:data=f.read()#a代表形容词
key_list=jieba.analyse.extract_tags(data,topK=100,allowPOS='a')
keys=' '.join(key_list)#合并到适合wordcloud处理的字符串
#collocations:是否找一些常见的词汇组合;这里不需要组合
#比如:我 草 这是一种常见的组合,但是这里不需要
wc=wordcloud.WordCloud(font_path='/System/Library/Fonts/Hiragino Sans GB.ttc',width=800,height=600,collocations=False,max_words=50,background_color='black').generate(keys)
image=wc.to_image()
image.show()