大家好,我是IT界搬运喵。

相信大家在工作无聊时,总想掏出手机,看看电影刷刷视频。更加是夜深人静的时候,总是按耐不住自己的内心想要去看看小电影,当然我可没有开车。我说的是好电影,豆瓣高分电影,自己想歪的时候可不要怪我。

但是看电影之前,都想会简单的了解一下这部电影讲的是什么剧情等等(我真没有开车!!!)所以我今天就来带你爬取一下豆瓣影评!

前言

利用利用requests+xpath爬取豆瓣影评,废话不多说。

让我们愉快地开始吧~

开发工具

Python版本:3.6.8

相关模块:

requests模块;

jieba模块;

pandas模块

numpy模块

pyecharts模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

前期准备

1.获取页面内容

# 爬取页面 url\
douban_url = 'https://movie.douban.com/subject/26647117/comments?status=P'\
# requests 发送请求\
get_response = requests.get(douban_url)\
# 将返回的响应码转换成文本(整个网页)\
get_data = get_response.text

2.分析页面内容,获取我们想要的内容

  • 浏览器中打开我们要爬取的页面
  • 按F12进入开发者工具,查看我们想要的数据在哪里
  • 这里我们只要 评论人+评论内

3.分析我们获取的 xpath值

'/html/body/div[3]/div[1]/div/div[1]/div[4]/**div[1]** /div[2]/h3/span[2]/a'
'/html/body/div[3]/div[1]/div/div[1]/div[4]/**div[2]** /div[2]/h3/span[2]/a'
'/html/body/div[3]/div[1]/div/div[1]/div[4]/**div[3]** /div[2]/h3/span[2]/a'

通过观察我们发现,这几个xpath只有细微不同,上面加粗的部分已数加的格式改变,所以我们要爬取所有的 commentator(评论者),只需把xpath改为:

'/html/body/div[3]/div[1]/div/div[1]/div[4]/**div**/div[2]/h3/span[2]/a'

即不要后面的序号,当我们查询时,会自动捕获类似的xpath。

  • 同样的分析,我们可以得到评论内容的xpath为:

    # (跟在上面代码后)解析页面,并输出获取内容\
    a = etree.HTML(get_data)\
    commentator = s.xpath('/html/body/div[3]/div[1]/div/div[1]/div[4]/div/div[2]/h3/span[2]/a/text()')\
    comment_content = a.xpath('/html/body/div[3]/div[1]/div/div[1]/div[4]/div/div[2]/p/text()')\
    # 解析获取内容,去除多余内容\
    for i in range(0,len(files)):\print(commentator[i]+'说:')\files[i].strip(r'\n')\files[i].strip(' ')\print(comment_content[i])

    运行结果

Oriol Paulo说: 'Wrath of silence' is quite different from the crime movies I've seen. It's a mix of genres. It's a crime movie,a mystery movie,an action movie,it's also a social realistic movie. Xin Yu Kun plays very well the mix of different genres in this film,and it has a powerful ending.文文周说: 对于平均水准以上的年轻导演,应毫不吝啬予以鼓励,对于年龄一大把了还言之无物的导演,才要无情打击。西楼尘说: 老板儿子吃真空羊肉,贪婪绞入碎肉机;屠夫儿子喝污染井水,正义只在电视屏。戳瞎左眼,被戳伤的同乡都能包庇;咬断舌头,被救助的律师却不敢发声。凭蛮力垒不成金字塔,靠假声变不成兔子妈。超人面具如同良心咒,送不回原主;寻子告示像是招魂符,在风里飘摇。真相埋进泥土,藏入山洞,终于再无人知。#85说: 忻钰坤第二部作品不是一部秀操作的《心迷宫2.0》,要说风格像谁,都像也都不像:凝视山洞的库布里克单点透视、像科恩兄弟一样塑造的神经质杀手、《老男孩》一样的长廊Fight…不一样的是,不只是想告诉你凶手是谁,而是他的选择,以及像手术刀一样划开上层失态、中层失德、底层失语、人间失格的社会症结一口吃掉小蛋糕说: 结尾太赞,配乐非常喜欢,如果能去掉字幕就好了。从姜武拿起烟灰缸的时候就猜到了结尾。只不过细思极恐,井水为什么越来越咸?为什么那么多人都水肿?村长是知道的,不然不会喝矿泉水。然而这个梗,最后却没有过多的交代大大肉罐说: 上层伪善残暴,中层冷漠自私,下层失语无力。武侠小王子说: 当年摩托罗拉的电量还是大大不如诺基亚。劉瀟陽说: 仅仅是80%成片,已经精彩绝伦。中国类型片就该这么拍。良好的多线叙事控制力,深穴映射人性,爆炸增长的经济,暴裂难控的社会问题,男人无声的愤恨和伤痛,就像无法发声的底层人民。黑暗结尾,孩子没有寻回,真相没有昭显,这却是社会真相。有时恶人作恶,仅是为了与相同利益者变成真正的同盟。木卫二说: 不断向下,堕入黑暗的那种片子,鞭挞了社会主要矛盾,且不负责提供解谜快感,所以看完会很沉,很堵。如果《心迷宫》还是手工时代的自发创作,《暴裂无声》明显是工业时代(卡司动作特效)的考量,三人较劲,律师一角太弱,宋洋战力太强,姜武模式化。优点和缺陷都比较明显。巴伐利亞酒神说: 结局太他妈的屌了,看完在影院倒吸一口凉气。影射也很牛逼啊,1984的摩托牌照,一个底层屌丝的人设为哑巴(没有话语权),律师(代表中产和法律)和煤老板(代表权贵和黑恶势力)的相互勾结。所以即便张保民拥有《黄海》里绵正赫那样爆表的武力值,也只能沦为这个残酷社会的牺牲品。凌睿说: 当你望着深渊的时候,深渊也在望着你。frozenmoon说: 昌万年是食肉者,徐文杰是喝汤的,而张保民本人就是“肉”,原本他们在食物链的一个位置安之若素的扮演自己的角色,但意外冲垮了一切。失控之后,每个人都发现自己不过都是“肉”,昌摘下假发和西装,也得臣服于暴力和运气,徐走出金钱和言辞的保护也要面对残酷,张的代价或许更大。人性暴裂的闷响。无耻不混蛋说: 影片最打动我的,不是那些显而易见、甚至昭然若揭的隐喻,而是整部影片的“失语”。我们属于“失语的一代”,对应片中,不仅仅只是表层的哑巴张保民的“生理性失语”,更是,精英阶层律师在片尾所选择的“主动性失语”。而影片对“失语”的精准展示,不仅敏感捕捉到了时代痛点,而且极为戳痛人心。

实现翻页,并把评论人和评论内容存入csv文件

翻页1:

和前面分析xpath不同,我们只要找出每页之间url的不同之处和规律即可。

# start 属性表示开始位置\
turn_page1 = 'https://movie.douban.com/subject/26647117/comments?status=P'\
turn_page2 = 'https://movie.douban.com/subject/26647117/comments?start=20&limit=20&sort=new_score&status=P'\
turn_page3 = 'https://movie.douban.com/subject/26647117/comments?start=40&limit=20&sort=new_score&status=P'\
turn_page4 = 'https://movie.douban.com/subject/26647117/comments?start=60&limit=20&sort=new_score&status=P'

观察发现,除了第一个,每个url就只有 start的值不同,而且每次增加20,上面已经说了start属性,通过观察我们也不难发现,每个页面只有20条评论,这个是由 limit这个属性控制的(小编已经试过,人为改动是没有用的,估计是豆瓣的反爬,但并不影响我们),我这里想说明的是这个start的值之所以会以20为增量,就是这个 limit 控制的。

翻页2:

# 获取评论总数\comment_counts = a.xpath('/html/body/div[3]/div[1]/div/div[1]/div[1]/ul/li[1]/span/text()')\comment_counts = int(comment_counts[0].strip("看过()"))\# 计算出总的的页面数(每页有20条评论)\page_counts = int(comment_counts/20)\# 请求访问,并把爬取数据存入csv文件\for i in range(0,page_counts):\turn_page_url = 'https://movie.douban.com/subject/26647117/comments?start={}&limit=20&sort=new_score&status=P'.format(i*20)\get_respones_data(turn_page_url)

在完成上面之前,我们肯定要把之前写的代码进行修改,让代码看起,我们可以把前面写的代码封装成一个函数get_respones_data(),传入一个访问url参数,获得返回的HTML。

代码实现

import requests\
from lxml import etree\
import pandas as pd\
def get_respones_data(douban_url = 'https://movie.douban.com/subject/26647117/comments?status=P'):\# requests 发送请求\get_response = requests.get(douban_url)\# 将返回的响应码转换成文本(整个网页)\get_data = get_response.text\# 解析页面\a = etree.HTML(get_data)\return a\first_a = get_respones_data()\# 翻页\comment_counts = first_a.xpath('/html/body/div[3]/div[1]/div/div[1]/div[1]/ul/li[1]/span/text()')\comment_counts = int(comment_counts[0].strip("看过()"))\page_counts = int(comment_counts / 20)\
#小编已经测试过了,如果没有登入的话最多只能访问10个页面,也就是200条评论\
#下一期小编将教大家如何应对反爬\for i in range(0, page_counts+1):\turn_page_url = 'https://movie.douban.com/subject/26647117/comments?start={}&limit=20&sort=new_score&status=P'.format(\i * 20)\print(turn_page_url)\a = get_respones_data(turn_page_url)\# 获取评论人和评论内容\commentator = a.xpath('/html/body/div[3]/div[1]/div/div[1]/div[4]/div/div[2]/h3/span[2]/a/text()')\comment_content = a.xpath('/html/body/div[3]/div[1]/div/div[1]/div[4]/div/div[2]/p/text()')\# 解析内容,并存入csv文件\content = [' ' for i in range(0, len(commentator))]\for i in range(0, len(commentator)):\comment_content[i].strip(r'\n')\comment_content[i].strip(' ')\content_s = [commentator[i],comment_content[i]]\content[i] = content_s\name = ['评论人','评论内容']\file_test = pd.DataFrame(columns=name, data=content)\if i == 0:\file_test.to_csv(r'H:\PyCoding\FlaskCoding\Test_all\test0609\app\comment_content.cvs',encoding='utf-8',index=False)\else:\file_test.to_csv(r'H:\PyCoding\FlaskCoding\Test_all\test0609\app\comment_content.cvs',mode='a+',encoding='utf-8',index=False)

数据可视化

安装新模块

pip install jieba\
pip install re\
pip install csv\
pip install pyecharts\
pip install numpy

解析数据

1    with codecs.open(r'H:\PyCoding\FlaskCoding\Test_all\test0609\app\comment_content.cvs', 'r', 'utf-8') as csvfile:\
2        content = ''\
3        reader = csv.reader(csvfile)\
4        i =0\
5        for file1 in reader:\
6            if i == 0 or i ==1:\
7                pass\
8            else:\
9                content =content + file1[1]\
10            i = i +1\
11        # 去除所有评论里多余的字符\
12        content = re.sub('[,,。. \r\n]', '', content)

分析数据

# 切词,将整个评论分解成一个个的词语\
segment = jieba.lcut(content)\
words_df = pd.DataFrame({'segment': segment})\
# quoting=3 表示stopwords.txt里的内容全部不引用\
stopwords = pd.read_csv(r"H:\PyCoding\FlaskCoding\Test_all\test0609\app\stopwords.txt", index_col=False, quoting=3, sep="\t", names=['stopword'], encoding='utf-8')\
words_df = words_df[~words_df.segment.isin(stopwords.stopword)]\
# 计算每个词语重复出现次数\
words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})\
words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)

数据可视化

1 test = words_stat.head(1000).values\
# 获取所有词语\
2 words = [test[i][0] for i in range(0,len(test))]\
# 获取词语对于的出现次数\
3 counts = [test[i][1] for i in range(0,len(test))]\
4wordcloud = WordCloud(width=1300, height=620)\
# 生成词云图\
5 wordcloud.add("爆裂无声", words, counts, word_size_range=[20, 100])\
6 wordcloud.render()

效果展示

好啦。词云也就出来啦!

总结一下:Python爬虫实战----------requests+xpath模块

总结完毕,大家学会了吗

我用Python爬取了豆瓣影评,成功后居然发现了一个惊人的秘密.........相关推荐

  1. python爬取豆瓣影评理论依据_我用Python爬取了豆瓣的影评

    使用Python爬取豆瓣的影评,比爬取网易云简单,因为不需要设置特定的headers,关于网易云说几句,很难爬取,对请求头有着严格的要求,前几年那会还好些. 爬取结果分为:用户名,评价的星级,评论的内 ...

  2. python爬取百部电影数据,我分析出了一个残酷的真相

    2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%:国产电影总票房411.75亿元,同比增长8.65%,市场占比 ...

  3. python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!

    1.前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习 ...

  4. python爬虫影评_Python爬虫-爬取杀破狼豆瓣影评并小作分析~

    也是前几天看到一个公众号推了一篇文章,是爬取战狼的影评.今天自己也来试一下 我选择爬的是<杀破狼> image.png 然后就是打开短评页面,可以看到comment-item,这就是影评了 ...

  5. Python——爬取目标豆瓣图书TOP250

    目标网址:https://book.douban.com/top250?start=0 参考资料: Requests:               http://docs.python-request ...

  6. 爬虫 | Python爬取20000+猫眼影评实战

    文章目录 1. 网页分析 2. 数据爬取 2.1 构造评论url 2.2 字段解析 3. 数据保存 推荐阅读 大家好,我是

  7. 小伙用Python爬取3000条B站视频,发现刘华强买瓜是这么火起来的!

    大家好,我是小五???? 最近B站这两个月,快被买瓜的刘华强屠版了,上一个这么火的人物,应该还是闪电五连鞭的马保国. 与之前的网络"审丑"视频不同,这次火的片段来自一部影视作品. ...

  8. 用Python爬取中国校花网后,我发现她们都有个共同点!

    我们都知道,爬虫获取页面的响应之后,最关键的就是如何从繁杂的网页中把我们需要的数据提取出来, python从网页中提取数据的包很多,常用的解析模块有下面的几个: BeautifulSoup API简单 ...

  9. Python爬取搜集豆瓣图书集,书荒的朋友们再也不用担心了

    0. 前序 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学 ...

最新文章

  1. 把Lumia 610C作为3G路由器
  2. centos7 系统备份
  3. 在 .NET 应用中使用 ANTLR
  4. 缓存击穿和缓存穿透的区别_后端RoadMap011:缓存穿透、缓存击穿、缓存雪崩区别和解决方案...
  5. __declspec(dllexport)、__declspec(dllimport)详解
  6. java ntlm_使用java UrlConnection使用ntlm(或kerberos)进行身份验证
  7. 2012年主流U盘启动盘制作工具合集下载
  8. 2016年农民工监测调查报告(zz)
  9. 基于大数据的精准营销与应用场景
  10. uniCloud 云函数
  11. 万字说透 Decentraland:元宇宙的先行者
  12. 风雨十年:一个老程序员的心里话!
  13. 如何只用三步就能快速写一个网页
  14. 入驻B站即涨粉百万, 内容为王的时代,半佛仙人到底硬核在哪里?
  15. 【实用教程】网页视频下载
  16. spark-env.sh配置——Spark学习日记
  17. magento会员邮件找回密码连接无效
  18. c语言long型对应占位符,C语言数据类型打印对应的占位符
  19. 用AForge将普通视频转换为带运动检测效果的视频
  20. 软件工程学习笔记——第六章 软件设计方法

热门文章

  1. React教程(六)——使用 create-react-app 快速构建 React 开发环境
  2. 如何选购台式电脑和笔记本?购买时应注意什么
  3. 【obs-studio开源项目从入门到放弃】预览窗口中source的UI操作绘制处理
  4. 2020-mac-东芝的移动硬盘插入到我的macbook pro系统上没反应,只是等在闪烁
  5. 《Collaborative Memory Network for Recommendation Systems》推荐系统之协同记忆网络CMN
  6. 血清CEA、HE4、CA199、CA153、CA125水平联合检测在妇科恶性肿瘤诊断中的临床意义
  7. 中国移动话费查询,短信查询,各种免费查询!以后别打10086了
  8. 给体制内新人的忠告:这10个“潜规则”咬紧牙别吱声,只做不说
  9. Swarm管理分布式docker
  10. 一文带你读懂“亚当理论”的精髓:期货股票交易操作守则与操作技巧