这篇文章主要介绍“如何用Python登录豆瓣并爬取影评”,在日常操作中,相信很多人在如何用Python登录豆瓣并爬取影评问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Python登录豆瓣并爬取影评”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、需求背景
二、功能描述
三、技术方案
四、登录豆瓣
1.分析豆瓣登录接口
2.代码实现登录豆瓣
3.保存会话状态
4.这个Session对象是我们常说的session吗?
五、爬取影评
1.分析豆瓣影评接口
2.爬取一条影评数据
3.影评内容提取
4.批量爬取
六、分析影评
1.使用结巴分词
七、总结
上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
我们今天就用requests库来登录豆瓣然后爬取影评为例子,用代码讲解下Cookie的会话状态管理(登录)功能。
豆瓣口碑一直不错,有些书或者电影的推荐都很不错,所以我们今天来爬取下豆瓣的影评,然后生成词云,看看效果如何吧!
我们使用requests库登录豆瓣,然后爬取影评,最后生成词云!
为什么我们之前的案例(京东、优酷等)中不需要登录,而今天爬取豆瓣需要登录呢?那是因为豆瓣在没有登录状态情况下只允许你查看前200条影评,之后就需要登录才能查看,这也算是一种反扒手段!
我们看下简单的技术方案,大致可以分为三部分:
分析豆瓣的登录接口并用requests库实现登录并保存cookie
分析豆瓣影评接口实现批量抓取数据
使用词云做影评数据分析
方案确定之后我们就开始实际操作吧!
做爬虫前我们都是先从浏览器开始,使用调试窗口查看url。
打开登录页面,然后调出调试窗口,输入用户名和密码,点击登录。
这里猪哥建议输入错误的密码,这样就不会因为页面跳转而捕捉不到请求!上面我们便获取到登录请求的URL:https://accounts.douban.com/j/mobile/login/basic
因为是一个POST请求,所以我们还需要看看请求登录时携带的参数,我们将调试窗口往下拉查看Form Data。
得到登录请求URL和参数后,我们就可以来用requests库来写一个登录功能!
上期我们在爬取优酷弹幕的时候我们是复制浏览器中的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对象来发起请求!
讲到这里也许有同学会问:requests.Session对象是不是我们常说的session呢?
答案当然不是,我们常说的session是保存在服务端的,而requests.Session对象只是一个用于保存Cookie的对象而已,我们可以看看它的源码介绍
所以大家千万不要将requests.Session对象与session技术搞混了!
我们实现了登录和保存会话状态之后,就可以开始干正事啦!
首先在豆瓣中找到自己想要分析的电影,这里选择一部美国电影《荒野生存》
然后下拉找到影评,调出调试窗口,找到加载影评的URL
但是爬取下来的是一个HTML网页数据,我们需要将影评数据提取出来
上图中我们可以看到爬取返回的是html,而影评数据便是嵌套在html标签中,如何提取影评内容呢?
这里我们使用正则表达式来匹配想要的标签内容,当然也有更高级的提取方法,比如使用某些库(比如bs4、xpath等)去解析html提取内容,而且使用库效率也比较高,但这是我们后面的内容,我们今天就用正则来匹配!
我们先来分析下返回html 的网页结构
我们发现影评内容都是在<span class="short"></span>
这个标签里,那我们 就可以写正则来匹配这个标签里的内容啦!
检查下提取的内容
我们爬取、提取、保存完一条数据之后,我们来批量爬取一下。根据前面几次爬取的经验,我们知道批量爬取的关键在于找到分页参数,我们可以很快发现URL中有一个start
参数便是控制分页的参数。
这里只爬取了25页就爬完,我们可以去浏览器中验证一下,是不是真的只有25页,猪哥验证过确实只有25页!
数据抓取下来之后,我们就来使用词云分析一下这部电影吧!
1.使用结巴分词
因为我们下载的影评是一段一段的文字,而我们做的词云是统计单词出现的次数,所以需要先分词!
最终成果:
七、总结
今天我们以爬取豆瓣为例子,学到了不少的东西,来总结一下:
学习如何使用requests库发起POST请求
学习了如何使用requests库登录网站
学习了如何使用requests库的Session对象保持会话状态
学习了如何使用正则表达式提取网页标签中的内容
鉴于篇幅有限,爬虫过程中遇到的很多细节和技巧并没有完全写出来,所以希望大家能自己动手实践
到此,关于“如何用Python登录豆瓣并爬取影评”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。