Python登录豆瓣并爬取影评
上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面:
- 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
- 个性化设置(如用户自定义设置、主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
我们今天就用requests库来登录豆瓣然后爬取影评为例子,
用代码讲解下Cookie的会话状态管理(登录)功能。
此教程仅用于学习,不得商业获利!如有侵害任何公司利益,请告知删除!
一、需求背景
之前猪哥带大家爬取了优酷的弹幕并生成词云图片,发现优酷弹幕的质量并不高,有很多介词和一些无效词,比如:哈哈、啊啊、这些、那些。。。而豆瓣口碑一直不错,有些书或者电影的推荐都很不错,所以我们今天来爬取下豆瓣的影评,然后生成词云,看看效果如何吧!
二、功能描述
我们使用requests库登录豆瓣,然后爬取影评,最后生成词云!
为什么我们之前的案例(京东、优酷等)中不需要登录,而今天爬取豆瓣需要登录呢?那是因为豆瓣在没有登录状态情况下只允许你查看前200条影评,之后就需要登录才能查看,这也算是一种反扒手段!
三、技术方案
我们看下简单的技术方案,大致可以分为三部分:
- 分析豆瓣的登录接口并用requests库实现登录并保存cookie
- 分析豆瓣影评接口实现批量抓取数据
- 使用词云做影评数据分析
方案确定之后我们就开始实际操作吧!
四、登录豆瓣
做爬虫前我们都是先从浏览器开始,使用调试窗口查看url。
1.分析豆瓣登录接口
打开登录页面,然后调出调试窗口,输入用户名和密码,点击登录。
这里猪哥建议输入错误的密码,这样就不会因为页面跳转而捕捉不到请求!上面我们便获取到登录请求的URL:https://accounts.douban.com/j/mobile/login/basic
因为是一个POST请求,所以我们还需要看看请求登录时携带的参数,我们将调试窗口往下拉查看Form Data。
2.代码实现登录豆瓣
得到登录请求URL和参数后,我们就可以来用requests库来写一个登录功能!
3.保存会话状态
上期我们在爬取优酷弹幕的时候我们是复制浏览器中的Cookie到请求头中这来来保存会话状态,但是我们如何让代码自动保存Cookie呢?
也许你见过或者使用过urllib
库,它用来保存Cookie的方式如下:
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HttpCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
opener(url)
但是前面我们介绍requests库的时候就说过:
requests库是一个基于urllib/3的第三方网络库,它的特点是功能强大,API优雅。由上图我们可以看到,对于http客户端python官方文档也推荐我们使用requests库,实际工作中requests库也是使用的比较多的库。
所以今天我们来看看requests库是如何优雅的帮我们自动保存Cookie的?我们来对代码做一点微调,使之能自动保存Cookie维持会话状态!
上述代码中,我们做了两处改动:
- 在最上面增加一行
s = requests.Session()
,生成Session对象用来保存Cookie - 发起请求不再是原来的requests对象,而是变成了Session对象
我们可以看到发起请求的对象变成了session对象,它和原来的requests对象发起请求方式一样,只不过它每次请求会自动带上Cookie,所以后面我们都用Session对象来发起请求!
4.这个Session对象是我们常说的session吗?
讲到这里也许有同学会问:requests.Session对象是不是我们常说的session呢?
答案当然不是,我们常说的session是保存在服务端的,而requests.Session对象只是一个用于保存Cookie的对象而已,我们可以看看它的源码介绍
所以大家千万不要将requests.Session对象与session技术搞混了!
五、爬取影评
我们实现了登录和保存会话状态之后,就可以开始干正事啦!
1.分析豆瓣影评接口
首先在豆瓣中找到自己想要分析的电影,这里猪哥选择一部美国电影**《荒野生存》**,因为这部电影是猪哥心中之最,没有之一!
然后下拉找到影评,调出调试窗口,找到加载影评的URL
2.爬取一条影评数据
但是爬取下来的是一个HTML网页数据,我们需要将影评数据提取出来
3.影评内容提取
上图中我们可以看到爬取返回的是html,而影评数据便是嵌套在html标签中,如何提取影评内容呢?
这里我们使用正则表达式来匹配想要的标签内容,当然也有更高级的提取方法,比如使用某些库(比如bs4、xpath等)去解析html提取内容,而且使用库效率也比较高,但这是我们后面的内容,我们今天就用正则来匹配!
我们先来分析下返回html 的网页结构
我们发现影评内容都是在<span class="short"></span>
这个标签里,那我们 就可以写正则来匹配这个标签里的内容啦!
检查下提取的内容
4.批量爬取
我们爬取、提取、保存完一条数据之后,我们来批量爬取一下。根据前面几次爬取的经验,我们知道批量爬取的关键在于找到分页参数,我们可以很快发现URL中有一个start
参数便是控制分页的参数。
这里只爬取了25页就爬完,我们可以去浏览器中验证一下,是不是真的只有25页,猪哥验证过确实只有25页!
六、分析影评
数据抓取下来之后,我们就来使用词云分析一下这部电影吧!
基于使用词云分析的案例前面已经讲过两个了,所以猪哥只会简单的讲解一下!
1.使用结巴分词
因为我们下载的影评是一段一段的文字,而我们做的词云是统计单词出现的次数,所以需要先分词!
2.使用词云分析
最终成果:
从这些词中我们可以知道这是关于一部关于追寻自我与现实生活的电影,猪哥裂墙推荐!!!
七、总结
今天我们以爬取豆瓣为例子,学到了不少的东西,来总结一下:
- 学习如何使用requests库发起POST请求
- 学习了如何使用requests库登录网站
- 学习了如何使用requests库的Session对象保持会话状态
- 学习了如何使用正则表达式提取网页标签中的内容
鉴于篇幅有限,爬虫过程中遇到的很多细节和技巧并没有完全写出来,所以希望大家能自己动手实践,当然也可以加入到猪哥的Python新手交流群中和大家一起学习,遇到问题也可以在群里提问!加群请加猪哥微信:it-pig66
,好友申请格式:加群-xxx!
获取源码,扫描下方二维码关注微信公众号「裸睡的猪」,回复:豆瓣影评
Python登录豆瓣并爬取影评相关推荐
- html登录界面设计代码_Python登录豆瓣并爬取影评
Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置.主题等) 浏览器行为跟踪(如跟踪分 ...
- python豆瓣影评_教你用python登陆豆瓣并爬取影评
教你用python登陆豆瓣并爬取影评 一起来 日常学python 这是我的第二篇原创文章 在上篇文章爬取豆瓣电影top250后,想想既然爬了电影,干脆就连影评也爬了,这样可以看看人们评价的电影,再加上 ...
- python登录网站后爬取数据_需要登陆网站后才能获取数据的页面爬取
本文转载自以下链接:https://www.makcyun.top/web_scraping_withpython8.html 目的是万一博主网站无法访问到的话自己需要学习的东西可就不存在了. 本文需 ...
- python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它
不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...
- python登录网站后爬取数据_如何用 Python 登录主流网站,爬取一些需要的数据
最近收集了一些网站的登陆方式和爬虫程序,有的通过 selenium 登录,有的则通过抓包直接模拟登录.作者希望该项目能帮助初学者学习各大网站的模拟登陆方式,并爬取一些需要的数据. 作者表示模拟登陆基本 ...
- python爬虫豆瓣top250_Python 爬取豆瓣TOP250实战
学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看. 可以看到每部电影都有比较全面的简介.其中包括电影名.导演.评分等. 接下来,我们就爬取这些数据,并将这 ...
- python登录网站后爬取数据_快速爬取登录网站数据
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 部分网站需要登录才能允许访问,因此爬虫需要获取登录cookie,然后通过爬虫代理使用该cookie进行数据采集.本示例按照以上流程进行实现如下: 1 模拟 ...
- Python爬虫入门(爬取豆瓣电影信息小结)
Python爬虫入门(爬取豆瓣电影信息小结) 1.爬虫概念 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或脚本.爬虫的本质是模拟浏览器打开网页,获取网页中我们想要的那部分数据. 2.基本流程 ...
- python 爬虫实例 电影-Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- python爬虫影评_Python爬虫(二十)_动态爬取影评信息
本案例介绍从JavaScript中采集加载的数据.更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import t ...
最新文章
- Namespace(命名空间)的使用
- AtCoder AGC032E Modulo Pairing (二分、贪心结论)
- 进化吧!我的C++!!
- POJ - 3660 Cow Contest(最短路变形+闭包传递)
- linux 所有命令无法使用
- HDOJ 1753 明朝A+B
- before css 旋转_CSS及购物车的制作练习
- java中RIGHT的值_java循环遍历, reduce(),reduceRight()方法和Object,keys遍历对象的属性...
- 百度Android在线语音识别SDK用法
- eclipse 使用svn导入web项目
- java编程语言的常用快捷方式
- java web 程序---javaBean
- webgame源码下载及网页游戏开发资源精华集合
- Keil C51大工程建立,模块化编程
- Uplift Model
- 当数学题加上了程序员思想
- 高德地图各种摄像头图标_高德地图Overlay的应用以及照相功能的实现
- 从玉农业考察汕尾华侨管理区-林裕豪:携手谋定农业产业
- Qt之Windows下禁用中文输入法
- 突破网管的局域网网络限制方法大全
热门文章
- 详析:谷歌为何紧急封杀阿里云OS?
- 百姓基因:关于历史和名人形象的亲子DNA测试
- 单例模式实现负载均衡器案例
- YY淘宝商品数据库设计
- c语言乘法口诀表的流程图_C语言实现“乘法口诀表”
- exceljs如何画单元格斜线?
- 威胁猎人|改机工具在黑灰产中的应用
- WaitHandles 的数目必须少于或等于 64 个
- 平板电脑可以用手写的计算机软件,手写平板电脑哪款好 手写平板电脑有哪些推荐...
- Robust Medical Instrument Segmentation Challenge 2019拜读