1 # -*- coding:utf-8 -*-
2 '''
3 抓取豆瓣电影某部电影的评论
4抓取电影
5 网址链接:https://movie.douban.com/subject/26630781/comments
6 为了抓取全部评论需要先进行登录
7 '''
8 from selenium import webdriver
9 import time
10 import codecs
11 import jieba
12 import jieba.analyse as analyse
13 from wordcloud import WordCloud
14 from scipy.misc import imread
15 from os import path
16
17 def get_douban_comments(url):
18 comments_list = [] # 评论列表
19 login_url = 'https://accounts.douban.com/login?source=movie'
20 user_name = '1111111' # 这里替换成你的豆瓣用户名
21 password = '11111111' # 这里替换成你的密码
22 driver = webdriver.Firefox() # 启动Firefox()
23 driver.get(login_url)
24 driver.find_element_by_id('email').clear() # 清除输入框
25 driver.find_element_by_id('email').send_keys(user_name) # 输入用户名
26 driver.find_element_by_id('password').clear()
27 driver.find_element_by_id('password').send_keys(password) # 输入密码
28 captcha_field = raw_input('请打开浏览器输入验证码:') # 手动填入验证码
29 driver.find_element_by_id('captcha_field').send_keys(captcha_field)
30 driver.find_element_by_class_name('btn-submit').click() # 点击登录按钮
31 time.sleep(5) # 等待跳转到登录之后的页面
32 driver.get(url) # 定位到目标页面
33 driver.implicitly_wait(3) # 智能等待3秒
34 n = 501 # 页数
35 count = 10000 # 评论数目
36 while True:
37 try:
38 results = driver.find_elements_by_class_name('comment')
39 for result in results:
40 # author = result.find_elements_by_tag_name('a')[1].text # 作者
41 # vote = result.find_element_by_class_name('comment-vote').find_element_by_tag_name('span').text # 赞同数目
42 # time0 = result.find_element_by_class_name('comment-info').find_elements_by_tag_name('span')[1].text # 时间
43 comment = result.find_element_by_tag_name('p').text # 评论内容
44 comments_list.append(comment+u'\n')
45 print u"查找到第%d个评论" % count
46 count += 1
47 driver.find_element_by_class_name('next').click() # 点击下一页
48 print u'第%d页查找完毕!' % n
49 n += 1
50 time.sleep(4)
51 except Exception,e:
52 print e
53 break
54 with codecs.open('pjl_comment.txt','a',encoding='utf-8') as f:
55 f.writelines(comments_list)
56 print u"查找到第%d页,第%d个评论!" %(n,count)
57
58 # 得到所有关键词
59 def get_all_keywords(file_name):
60 word_lists = [] # 关键词列表
61 with codecs.open(file_name,'r',encoding='utf-8') as f:
62 Lists = f.readlines() # 文本列表
63 for List in Lists:
64 cut_list = list(jieba.cut(List))
65 for word in cut_list:
66 word_lists.append(word)
67 word_lists_set = set(word_lists) # 去除重复元素
68 sort_count = []
69 word_lists_set = list(word_lists_set)
70 length = len(word_lists_set)
71 print u"共有%d个关键词" % length
72 k = 1
73 for w in word_lists_set:
74 sort_count.append(w+u':'+unicode(word_lists.count(w))+u"次\n")
75 print u"%d---" % k + w+u":"+unicode(word_lists.count(w))+ u"次"
76 k += 1
77 with codecs.open('count_word.txt','w',encoding='utf-8') as f:
78 f.writelines(sort_count)
79
80 def get_top_keywords(file_name):
81 top_word_lists = [] # 关键词列表
82 with codecs.open(file_name,'r',encoding='utf-8') as f:
83 texts = f.read() # 读取整个文件作为一个字符串
84 Result = analyse.textrank(texts,topK=20,withWeight=True,withFlag=True)
85 n = 1
86 for result in Result:
87 print u"%d:" % n ,
88 for C in result[0]: # result[0] 包含关键词和词性
89 print C,u" ",
90 print u"权重:"+ unicode(result[1]) # 关键词权重
91 n += 1
92
93 # 绘制词云
94 def draw_wordcloud():
95 with codecs.open('pjl_comment.txt',encoding='utf-8') as f:
96 comment_text = f.read()
97 cut_text = " ".join(jieba.cut(comment_text)) # 将jieba分词得到的关键词用空格连接成为字符串
98 d = path.dirname(__file__) # 当前文件文件夹所在目录
99 color_mask = imread("F:/python2.7work/wordcloud/alice_color.png") # 读取背景图片
100 cloud = WordCloud(font_path=path.join(d,'simsun.ttc'),background_color='white',mask=color_mask,max_words=2000,max_font_size=40)
101 word_cloud = cloud.generate(cut_text) # 产生词云
102 word_cloud.to_file("pjl_cloud.jpg")
103
104
105
106 if __name__ == '__main__':
107 '''
108 url = 'https://movie.douban.com/subject/26630781/comments?start=10581&limit=20&sort=new_score'
109 get_douban_comments(url)
110 file_name = 'pjl_comment.txt'
111 get_top_keywords(file_name)
112 '''
113 draw_wordcloud()
- CVPR2018关键字分析生成词云图与查找
今日目标:爬取CVPR2018论文,进行分析总结出提到最多的关键字,生成wordCloud词云图展示,并且设置点击后出现对应的论文以及链接 对任务进行分解: ①爬取CVPR2018的标题,简介,关键字 ...
- 谁说程序员不浪漫?Python导出微信聊天记录生成爱的词云图
明天又双叒叕是一年一度的七夕恋爱节了! 又是一波绝好的机会!恩爱秀起来! 购物车清空!礼物送起来!朋友圈晒起来! 等等! 什么?! 你还没准备好七夕礼物么? 但其实你不知道要送啥? 原来又双叒叕要 ...
- python爬虫+词云图,爬取网易云音乐评论
又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...
- 特朗普退出《巴黎协定》:python词云图舆情分析
1 前言 2017年6月1日,美国特朗普总统正式宣布美国退出<巴黎协定>.宣布退出<巴黎协定>后,特朗普似乎成了“全球公敌”. 特斯拉总裁马斯克宣布退出总统顾问团队 迪士尼董事 ...
- [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理
爬取豆瓣电影<大侦探皮卡丘>的影评,并做词云图和关键词绘图第一步:找到评论的网页url.https://movie.douban.com/subject/26835471/comments ...
- 【爬虫+情感判定+Top10高频词+词云图】“谷爱凌”热门弹幕python舆情分析
一.背景介绍 最近几天,谷爱凌在冬奥会赛场上夺得一枚宝贵的金牌,为中国队贡献了自己的荣誉! 针对此热门事件,我用Python的爬虫和情感分析技术,针对小破站的弹幕数据,分析了众网友弹幕的舆论导向,下面 ...
- 【爬虫+情感判定+Top10高频词+词云图】“刘畊宏“热门弹幕python舆情分析
一.背景介绍 最近一段时间,刘畊宏真是火出了天际,引起一股全民健身的热潮,毕竟锻炼身体,是个好事! 针对此热门事件,我用Python的爬虫和情感分析技术,针对小破站的弹幕数据,分析了众多网友弹幕的舆论 ...
- 【爬虫+情感判定+Top10高频词+词云图】"王心凌"热门弹幕python舆情分析
目录 一.背景介绍 二.代码讲解-爬虫部分 2.1 分析弹幕接口 2.2 讲解爬虫代码 三.代码讲解-情感分析部分 3.1 整体思路 3.2 情感分析打标 3.3 统计top10高频词 3.4 绘制词 ...
- python 数据分析--词云图,图形可视化美国竞选辩论
这篇博客从用python实现分析数据的一个完整过程.以下着重几个python的moudle的运用"pandas",""wordcloud"," ...
随机推荐
- [ZJOI2004]嗅探器 (割点)
这题就比较好玩吧水题 以数据范围来看随便怎么做就能过 \(O(n)\)显然我们得过一个割点,其次这个割点得在\(x-y\)中间且不为始终点 其他都好说,在中间:从\(x\)开始遍历,首先得保证\(x- ...
- P5346 【XR-1】柯南家族(后缀数组+主席树)
题目 P5346 [XR-1]柯南家族 做法 聪明性是具有传递性的,且排列是固定的 那么先预处理出每个点的名次,用主席树维护\(k\)大值 一眼平衡树,遍历的同时插入\(O(log^2n)\),总时间 ...
- 数据结构Java版之查找算法(三)
关于查找算法,这里只进行两个算法的说明.包括 顺序查找 和 折半查找. 顺序查找: 顺序查找常用于未排序的数据中.查找速度较慢,只能应用于较小的数据量. public int sequentialSe ...
- 走进JavaWeb技术世界14:通过项目逐步深入了解Mybatis(一)
通过项目逐步深入了解Mybatis(一) 2017-06-12 文章导航 Mybatis 和 SpringMVC 通过订单商品案例驱动 官方中文地址:http://www.mybatis.org/my ...
- TortoiseSVN 使用教程
TortoiseSVN 使用教程 TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. TortoiseSVN 安装 下载地址:https ...
- SpringBoot缓存技术
一.SpringBoot整合Ehhcache 添加maven依赖 <dependency> <groupId>org.springframework.boot</grou ...
- ISO/IEC 9899:2011 条款6.2.7——兼容类型与组合类型
6.2.7 兼容类型与组合类型 1.两个类型具有兼容类型,如果它们的类型是相同的.用于判定两个类型是否兼容的其它规则在6.7.2关于类型说明符中,6.7.3关于类型说明符中,6.7.6关于声明符中描述 ...
- webdriver报不可见元素异常方法总结
最近一直在学Selenium相关东西,学到webdriver这块,出现报不可见元素异常方法异常,后来网上找了好多相关资料都没搞定,也没看明白,最后发现是xpath中写了calss属性有问题.现在把学习 ...
- Linux系列之——tomcat 的开机自启动
--未验证 每次开机都要启动tomcat,非常麻烦:通过直接修改系统文件,实现tomcat自启动: 1. 修改脚本文件rc.local:vim /etc/rc.d/rc.local 这个脚本是使用者自 ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_08-用户认证-认证服务查询数据库-用户登录前端
点击登陆注册链接 跳转到登陆的页面 门户的前端代码 当前路径base64编码 登陆的表单,在学习中心的前端. 这就是登陆的表单 这是表单的校验 请求服务端的接口 登陆请求的方法 请求的地址nginx上 ...