10
11 # 验证码手动处理,输入后,需要将图片关闭才能继续执行下一步
12 captcha_link = browser.find_element_by_id(‘captcha_image’).get_attribute(‘src’)
13 urllib.request.urlretrieve(captcha_link,‘captcha.jpg’)
14 Image.open(‘captcha.jpg’).show()
15 captcha_code = input(‘Pls input captcha code:’)
16 browser.find_element_by_id(‘captcha_field’).send_keys(captcha_code)
17
18 browser.find_element_by_css_selector(‘input[class=“bn-submit”]’).click()
19 browser.get(url)
20 browser.implicitly_wait(10)
21 return(browser)
**爬短评**
登录之后,转到我们要爬的蚁人2短评页面,爬完一页之后,找到**后页**的位置**click**跳转到下一页继续爬,循环一直到最后一页,从开发者工具可以看到,第一页的后页**xpath**是"//\*[@id='paginator']/a",之后每一页的后页的xpath都是"//\*[@id='paginator']/a[3]",但最后一页的xpath不为这两个,因此可以通过循环的方式,第一页之后,只要"//\*[@id='paginator']/a[3]"找得到,就跳转到下一页继续爬,直到找不到为止。
![](https://img-blog.csdnimg.cn/20190620211207901.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
具体爬的时候,用一个dataframe来存所有的信息,一行为一个用户的所有数据,数据位置仍然通过开发者工具获得,细节不再赘述。
**代码**
1def getComment(url):
2 i = 1
3 AllArticle = pd.DataFrame()
4 browser = gethtml(url)
5 while True:
6 s = browser.find_elements_by_class_name(‘comment-item’)
7 articles = pd.DataFrame(s,columns = [‘web’])
8 articles[‘uesr’] = articles.web.apply(lambda x:x.find_element_by_tag_name(‘a’).get_attribute(‘title’))
9 articles[‘comment’] = articles.web.apply(lambda x:x.find_element_by_class_name(‘short’).text)
10 articles[‘star’] = articles.web.apply(lambda x:x.find_element_by_xpath(“//[@id=‘comments’]/div[1]/div[2]/h3/span[2]/span[2]“).get_attribute(‘title’))
11 articles[‘date’] = articles.web.apply(lambda x:x.find_element_by_class_name(‘comment-time’).get_attribute(‘title’))
12 articles[‘vote’] = articles.web.apply(lambda x:np.int(x.find_element_by_class_name(‘votes’).text))
13 del articles[‘web’]
14 AllArticle = pd.concat([AllArticle,articles],axis = 0)
15 print (‘第’ + str(i) + ‘页完成!’)
16
17 try:
18 if i==1:
19 browser.find_element_by_xpath(”//[@id=‘paginator’]/a”).click()
20 else:
21 browser.find_element_by_xpath(“//*[@id=‘paginator’]/a[3]”).click()
22 browser.implicitly_wait(10)
23 time.sleep(3) # 暂停3秒
24 i = i + 1
25 except:
26 AllArticle = AllArticle.reset_index(drop = True)
27 return AllArticle
28 AllArticle = AllArticle.reset_index(drop = True)
29 return AllArticle
调用以上两个函数爬取数据,其实对于豆瓣上别的电影影评,估计稍微改一改也可以爬了
1url = ‘https://movie.douban.com/subject/26636712/comments?status=P’
2result = getComment(url)
最终爬下来的数据大概是这样子
![](https://img-blog.csdnimg.cn/20190620211230986.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
**2. 文本分析**
**描述统计分析**
首先看一看拿到的样本中各星级评价的分布情况,None表示没有星级评价。
![](https://img-blog.csdnimg.cn/20190620211239702.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)![](https://img-blog.csdnimg.cn/20190620211248692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
整体来看,三星四星评价巨多,说明大家对于蚁人2整体评价还不错。
再来看看哪些短评大家最认可,投票数最多
![](https://img-blog.csdnimg.cn/20190620211302752.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
嗯,怎么说呢
![](https://img-blog.csdnimg.cn/20190620211314616.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
初代黄蜂女的扮演者米歇尔·菲佛也成功引起了广大影迷的注意力。
**情感分析**
情感分析做的比较简单,主要借助于**snownlp**包,对于评论的情感倾向进行评分,0-1之间,**越正面的情感倾向对应的分值越高**,不过根据官方说明,这里用到的模型是用购物评价数据训练出来的,用到这里可能误差会有些大, 姑且一试吧,感觉效果还可以。
1# 情感分析
2def sentiment(content):
3 s = SnowNLP(str(content))
4 return s.sentiments
5
6
7result[‘sentiment’] = result.comment.apply(sentiment)
8
9# 负面评价
10result.sort([‘sentiment’],ascending = True)[:10][[‘comment’,‘sentiment’]]
11
12# 正面评价
13result.sort([‘sentiment’],ascending = False)[:10][[‘comment’,‘sentiment’]]
先来看看正面评价,**sentiment**表示情感得分。
![](https://img-blog.csdnimg.cn/20190620211327806.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
恩,看上去正面评价基本都是高星级评分的观众给出的,有理有据,令人信服。再来看看负面评价
![](https://img-blog.csdnimg.cn/20190620211342564.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
**分词词云**
通过**jieba**进行分词,根基**TF-IDF**算法提取关键词,代码及部分关键词如下
1texts = ‘;’.join(result.comment.tolist())
2cut_text = " ".join(jieba.cut(texts))
3keywords = jieba.analyse.extract_tags(cut_text, topK=500, withWeight=True, allowPOS=(‘a’,‘e’,‘n’,‘nr’,‘ns’))
4
5
6ss = pd.DataFrame(keywords,columns = [‘词语’,‘重要性’])
7
8fig = plt.axes()
9plt.barh(range(len(ss.重要性[:20][::-1])),ss.重要性[:20][::-1],color = ‘darkred’)
10fig.set_yticks(np.arange(len(ss.重要性[:20][::-1])))
11fig.set_yticklabels(ss.词语[:20][::-1],fontproperties=font)
12fig.set_xlabel(‘Importance’)
13
14alice_mask = np.array(Image.open( “yiren.jpg”))
15text_cloud = dict(keywords)
16cloud = WordCloud(
17 width = 600,height =400,
18 font_path=“STSONG.TTF”,
19 # 设置背景色
20 background_color=‘white’,
21
22 mask=alice_mask,
23 #允许最大词汇
24 max_words=500,
25 #最大号字体
26 max_font_size=150,
27 #random_state=777,
28 # colormap = ‘Accent_r’
29 )
30
31
32
33plt.figure(figsize=(12,12))
34word_cloud = cloud.generate_from_frequencies(text_cloud)
35plt.imshow(word_cloud)
36plt.axis(‘off’)
37plt.show()
**关键词**
![](https://img-blog.csdnimg.cn/20190620211356358.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
分词结果来看,"**彩蛋**"毫无疑问是是蚁人2中大家最关心的点。最后,以蚁人分词词云作为文章结尾!
![](https://img-blog.csdnimg.cn/20190620211418792.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podXNvbmd6aXll,size_16,color_FFFFFF,t_70)
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
* * *
**(1)Python所有方向的学习路线(新版)**
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8fc093dcfa1f476694c574db1242c05b.png)
**(2)Python学习视频**
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)
**(3)100多个练手项目**
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)
**(4)200多本电子书**
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
**(5)Python知识点汇总**
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c741a91b05a542ba9dc8abf2f2f4b1af.png)
**(6)其他资料**
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9fa77af248b84885a6ec779b2ead064d.png)
**这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。**