当前位置: 首页 > 后端技术 > Python

Python登录豆瓣爬取影评

时间:2023-03-26 17:07:23 Python

上一篇我们讲了Cookie的相关知识,了解到Cookie是为交互web而生的,主要用在以下三个方面:会话状态管理(如如用户登录状态、购物车、游戏分数或其他需要记录的信息)个性化设置(如用??户自定义设置、主题等)浏览器行为跟踪(如跟踪分析用户行为等)今日我们以requests库登录豆瓣和爬取电影评论为例,用代码讲解Cookie的会话状态管理(登录)功能。本教程仅供学习,请勿用于商业用途!如有侵犯公司利益,请告知并删除!一、需求背景之前诸葛带着大家爬优酷的弹幕生成词云图,发现优酷的弹幕质量不高,介词很多,还有一些无效词,比如:哈哈,啊,这些,那些...豆瓣的口碑一直很好,一些书或者电影的推荐都很好,所以今天就来爬取豆瓣的影评,然后生成一个词云,看看效果如何!2.功能说明我们使用requests库登录豆瓣,然后爬取影评,最后生成词云!为什么我们以前的案例(京东、优酷等)不需要登录,今天爬豆瓣却需要登录?那是因为豆瓣只允许你在没有登录的情况下查看前200条影评,之后需要登录才能查看。这也是反扒的手段!3、技术方案先看简单的技术方案,大致分为三部分:分析豆瓣的登录界面,使用requests库登录保存cookie。解析豆瓣的影评接口,实现批量抓取数据。使用词云分析电影评论数据并确定解决方案。那我们就进入实际操作吧!4、爬虫登录豆瓣之前,我们先从浏览器开始,使用调试窗口查看url。1.分析豆瓣登录界面打开登录页面,然后调出调试窗口,输入用户名和密码,点击登录。这里朱哥建议输入错误的密码,这样就不会因为页面跳转而漏掉请求了!上面我们得到了登录请求的URL:https://accounts.douban.com/j...因为是POST请求,所以我们还要看请求登录时携带的参数,我们会下拉调试窗口以查看表单数据。2.登录豆瓣的代码实现得到登录请求URL和参数后,我们就可以使用requests库写一个登录函数了!3、保存session状态上期我们在抓取优酷弹幕的时候,将浏览器中的cookie复制到请求头中来保存session状态,但是如何让代码自动保存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库是如何优雅的帮我们自动保存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技术搞混了!5.爬取影评在我们实现了登录和保存会话状态之后,我们就可以开始做正事了!1.分析豆瓣影评界面首先在豆瓣找到你要分析的电影。在这里,朱哥选择了一部美国电影《荒野生存》,因为这部电影是朱哥心中最喜欢的电影,没有之一!然后下拉找到影评,调出调试窗口,找到加载影评的URL2。爬取一段影评数据,但是爬取的数据是HTML网页数据,我们需要提取影评数据。3.影评内容提取上图我们可以看到,当爬取返回的是html,而影评数据嵌套在html标签中,如何提取影评内容呢?这里我们使用正则表达式来匹配想要的标签内容。当然还有更高级的提取方法,比如使用一些库(如bs4、xpath等)解析HTML来提取内容,使用库的效率比较高,但这是后面的内容我们,今天就用正则表达式来匹配吧!我们先来分析一下返回的html的网页结构。我们发现电影评论内容在标签中,那么我们可以写正则表达式来匹配这个标签中的内容!检查提取的内容4.批量爬取一条数据爬取、提取、保存后,我们来分批爬取。根据之前的爬取经验,我们知道批量爬取的关键是找到分页参数。我们可以很快发现,控制分页的URL中有一个start参数。这里只爬取了25个页面,爬取结束。我们可以去浏览器验证一下,真的只有25页。朱大哥验证过,确实只有25页!6.分析影评数据抓取后,我们来用词云来分析电影吧!之前已经提到过两个基于使用词云分析的案例,那么朱哥就简单说明一下吧!1.使用口吃分词因为我们下载的影评是一段段的文字,而我们做的词云是统计单词出现的次数,所以需要先进行分词!2、用词云分析最后的结果:从这些词中我们可以知道,这是一部关于自我追寻和现实生活的电影,猪哥推荐!!!七。总结今天,我们以爬取豆瓣为例,收获颇丰。总结一下:学习了如何使用requests库发起POST请求,学习了如何使用requests库登录网站,学习了如何使用requests库的Session对象维护会话状态学习了如何使用正则表达式提取网页标签中的内容。由于篇幅有限,爬取过程中遇到的很多细节和技巧都没有写完整,希望大家自己动手实践,当然也可以加入朱哥的Python新手交流群和大家一起学习,并且遇到问题也可以在群里提问!加群请加猪哥微信:it-pig66,加群申请格式:加群-xxx!源码地址:https://github.com/pig6/douba...