在网上看到去年别人制作云词图的方法,打算自己也来试试,那我就试试目前比较火的新春电影——《流浪地球2》。
下面我们就来看一下《流浪地球2》在豆瓣影评中都有哪些优质的评论以及出现最多的词是哪些。
1.确定数据所在的url
豆瓣电影短评地址: https://movie.douban.com/subject/35267208/comments?status=P
2.发送网络请求
使用requests库发送网络请求,并看下他的文本内容。
url = 'https://movie.douban.com/subject/35267208/comments?status=P' headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"} response = requests.get(url=url,headers=headers) print(response.text)
看一下抓取到的网页源码:
3.分析数据
关于Google使用xpath定位的方法,下面说明,特别方便。
首先到网盘下载Xpath-helper插件:
-
Xpath-helper插件网盘下载地址
提取码: 4wk6 -
然后下载将xpath-helper.crx文件的后缀改为xpath-helper.zip,拖入谷歌浏览器的扩展程序中。
-
扩展程序在谷歌浏览器右上角->点击三个点->更多工具->扩展程序
-
重启谷歌浏览器(页面也需要重启),按快捷键Ctrl+Shift+X启动Xpath-helper(注意是大写X),如果使用快捷键没反应有可能是快捷键冲突,需要手动更改。
-
打开和关闭xpath helper的快捷键都是:Ctrl+Shift+X。
-
打开之后如图所示:是一个黑色的窗体,左边显示query,右边显示result。
-
按住ctrl + shift ,然后移动鼠标就可以选择页面上的元素,被选中的元素会显示不同的颜色,query窗口中显示的就是xpath的值,选完以后放开ctrl 和shift键就可以了。
-
xpath helper除了可以获取页面元素的xpath地址,也可以验证用户自己写的xpath地址是否正确。
-
query窗口可以手动输入和修改xpath地址。
如何判断输入的地址是正确的呢:
1、result窗口有显示对应的内容,而不是null
2、页面中对应的元素会变成黄色
复合以上两点,说明xpath写对了。
言归正传,抓到xpath,使用xpath点位到你想要的数据,可以看到所有评论的定位为//span[@class='short']
于是,我们获取每条评论文本,使用text(),并获取所有影评,使用getall()函数。
html_data = response.text selector = parsel.Selector(html_data) # 转换数据类型 comments_list = selector.xpath("//span[@class = 'short']/text()").getall() print(comments_list)
4.数据存储
将数据保存到txt中,注意把原始数据中的换行符替换掉,并且输入完一条评论后加个换行符。
# 数据存储 with open('《流浪地球2》.txt', mode='a', encoding='utf-8') as f: for comment in comments_list: f.write(comment.replace('\n', '')) f.write('\n') #执行到这里的效果,同级目录生成一个“《流浪地球2》.txt ” 文件
5.爬取10页影评数据
通过分析发现每一页的地址只是start不一样且呈规律出现
https://movie.douban.com/subject/35267208/comments?start=20&limit=20&status=P&sort=new_score
https://movie.douban.com/subject/35267208/comments?start=40&limit=20&status=P&sort=new_score
https://movie.douban.com/subject/35267208/comments?start=60&limit=20&status=P&sort=new_score
于是,我们写一个for循环来爬取10页影评
#for循环爬取10页影评 page_count = 0 for page in range(0,180,20): page_count += 1 print("======================正在爬取第{}页数据========================".format(page_count)) # 获取url地址的内容 url = 'https://movie.douban.com/subject/35267208/comments?start={}&limit=20&status=P&sort=new_score'.format(page) headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"} # 将请求返回的结果转换为text response = requests.get(url=url, headers=headers) html_data = response.text selector = parsel.Selector(html_data) # 转换数据类型 comments_list = selector.xpath("//span[@class='short']/text()").getall() # print(comments_list) # 数据存储 with open('《流浪地球2》.txt', mode='a', encoding='utf-8') as f: for comment in comments_list: f.write(comment.replace('\n', '')) f.write('\n')
看一下效果,你也可以看到同级目录生成一个“《流浪地球2》.txt ” 文件。
6.生成词云库
打开刚才的txt,并使用jiaba库进行分词。这里需要现导入jiaba库,如果没有,就安装一下,pip install jieba
很简单的
#生成词云库 f = open('《流浪地球2》.txt',mode = 'r',encoding ='utf-8') txt = f.read() txt_list = jieba.lcut(txt) string1 = " ".join(txt_list)
设置词云图并制作,这里需要安装并导入wordcloud库
#设置词云图并制作,这里需要安装并导入wordcloud库 #词云图设置 wc = wordcloud.WordCloud(width=1000, height=800, background_color='white', font_path='msyh.ttc', scale=15, stopwords= set([line.strip() for line in open('《流浪地球2》.txt',mode='r',encoding='utf-8').readline()])) #给云词图输入文字 wc.generate(string1) #保存云词图 wc.to_file('output.png')
完整代码如下:
import jiaba as jiaba import jieba import parsel as parsel import wordcloud from pip._vendor import requests #for循环爬取10页影评 page_count = 0 for page in range(0,180,20): page_count += 1 print("======================正在爬取第{}页数据========================".format(page_count)) # 获取url地址的内容 url = 'https://movie.douban.com/subject/35267208/comments?start={}&limit=20&status=P&sort=new_score'.format(page) headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"} # 将请求返回的结果转换为text response = requests.get(url=url, headers=headers) html_data = response.text selector = parsel.Selector(html_data) # 转换数据类型 comments_list = selector.xpath("//span[@class='short']/text()").getall() # print(comments_list) # 数据存储 with open('《流浪地球2》.txt', mode='a', encoding='utf-8') as f: for comment in comments_list: f.write(comment.replace('\n', '')) f.write('\n') #执行到这里的效果,同级目录生成一个“《流浪地球2》.txt ” 文件 #生成词云库 f = open('《流浪地球2》.txt',mode = 'r',encoding ='utf-8') txt = f.read() txt_list = jieba.lcut(txt) string1 = " ".join(txt_list) #设置词云图并制作,这里需要安装并导入wordcloud库 #词云图设置 wc = wordcloud.WordCloud(width=1000, height=800, background_color='white', font_path='msyh.ttc', scale=15, stopwords= set([line.strip() for line in open('《流浪地球2》.txt',mode='r',encoding='utf-8').readline()])) #给云词图输入文字 wc.generate(string1) #保存云词图 wc.to_file('output.png')
查看生成的云图:
标签:xpath,代码生成,url,流浪,list,comments,云图,炫酷,txt From: https://www.cnblogs.com/zhaocbbb/p/17088656.html