Cookie是为了交互式web而诞生的,它主要用于以下三个方面:

  1. 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)

  2. 个性化设置(如用户自定义设置、主题等)

  3. 浏览器行为跟踪(如跟踪分析用户行为等)

我们今天就用requests库来登录豆瓣然后爬取影评为例子,用代码讲解下Cookie的会话状态管理(登录)功能

此教程仅用于学习,不得商业获利!如有侵害任何公司利益请及时联系!

一、需求背景

之前爬取了优酷的弹幕并生成词云图片,发现优酷弹幕的质量并不高,有很多介词和一些无效词,比如:哈哈、啊啊、这些、那些。。。而豆瓣口碑一直不错,有些书或者电影的推荐都很不错,所以我们今天来爬取下豆瓣的影评,然后生成词云,看看效果如何吧!

二、功能描述

我们使用requests库登录豆瓣,然后爬取影评,最后生成词云!

为什么我们之前的案例(京东、优酷等)中不需要登录,而今天爬取豆瓣需要登录呢?那是因为豆瓣在没有登录状态情况下只允许你查看前200条影评,之后就需要登录才能查看,这也算是一种反爬手段!

三、技术方案

我们看下简单的技术方案,大致可以分为三部分:

  1. 分析豆瓣的登录接口并用requests库实现登录并保存cookie

  2. 分析豆瓣影评接口实现批量抓取数据

  3. 使用词云做影评数据分析

方案确定之后我们就开始实际操作吧!

四、登录豆瓣

做爬虫前我们都是先从浏览器开始,使用调试窗口查看url。

1.分析豆瓣登录接口

打开登录页面,然后调出调试窗口,输入用户名和密码,点击登录。这里建议输入错误的密码,这样就不会因为页面跳转而捕捉不到请求!上面我们便获取到登录请求的URL:

https://accounts.douban.com/j/mobile/login/basic

因为是一个POST请求,所以我们还需要看看请求登录时携带的参数,我们将调试窗口往下拉查看Form Data

2.代码实现登录豆瓣

得到登录请求URL和参数后,我们就可以来用requests库来写一个登录功能!

3.保存会话状态

我们如何让代码自动保存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维持会话状态!上述代码中,我们做了两处改动:

  1. 在最上面增加一行s = requests.Session(),生成Session对象用来保存Cookie

  2. 发起请求不再是原来的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 的网页结构我们发现影评内容都是在这个标签里,那我们 就可以写正则来匹配这个标签里的内容啦!检查下提取的内容

4.批量爬取

我们爬取、提取、保存完一条数据之后,我们来批量爬取一下。根据前面几次爬取的经验,我们知道批量爬取的关键在于找到分页参数,我们可以很快发现URL中有一个start参数便是控制分页的参数。这里只爬取了25页就爬完,我们可以去浏览器中验证一下,是不是真的只有25页,验证后确实只有25页!

六、分析影评

数据抓取下来之后,我们就来使用词云分析一下这部电影吧!

基于使用词云分析的案例前面已经讲过两个了,所以猪哥只会简单的讲解一下!

1.使用结巴分词

因为我们下载的影评是一段一段的文字,而我们做的词云是统计单词出现的次数,所以需要先分词!

2.使用词云分析

最终成果:

从这些词中我们可以知道这是关于一部关于追寻自我现实生活的电影。

七、总结

今天我们以爬取豆瓣为例子,学到了不少的东西,来总结一下:

  1. 学习如何使用requests库发起POST请求

  2. 学习了如何使用requests库登录网站

  3. 学习了如何使用requests库的Session对象保持会话状态

  4. 学习了如何使用正则表达式提取网页标签中的内容

▼ 点击成为社区注册会员          「在看」一下,一起PY!

html登录界面设计代码_Python登录豆瓣并爬取影评相关推荐

  1. pyqt5登录界面设计——模仿qq登录界面,可登录注册(数据库)

    pyqt5登录界面设计--模仿qq登录界面 一.简单易用的可直接登录的界面--账号密码程序写死 1.1.效果图: 1.2.视频效果图 3.代码说明 4.使用示例 5.全部源码见: 二.带数据库的可登录 ...

  2. python豆瓣影评_教你用python登陆豆瓣并爬取影评

    教你用python登陆豆瓣并爬取影评 一起来 日常学python 这是我的第二篇原创文章 在上篇文章爬取豆瓣电影top250后,想想既然爬了电影,干脆就连影评也爬了,这样可以看看人们评价的电影,再加上 ...

  3. html登录界面设计代码_.NET 5 开发WPF - 美食应用登录UI设计

    Demo演示: 你的时间宝贵,不想看啰嗦的文字,可直接拉到文末下载源码! 1. 新建项目 站长开发环境: VS 2019企业版 16.70 .NET 5 Preview 5 .NET 5 WPF 项目 ...

  4. html登录界面设计代码_最简洁实现Github登录的JS代码示例

    本文源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github 大纲 概述 实现思路分析 在Github官网 ...

  5. 爬虫python下载文献代码_Python爬虫案例:爬取微信公众号文章

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 文章转载于公众号:早起Python 作者:陈熹 大家好,今天我们来讲点Selenium自动化,你是 ...

  6. VB登录界面设计代码

    Option Explicit '窗口始终在最前 Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As ...

  7. python图形界面设计代码_python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方...

    PyQt5 Qt Designer (Qt设计师) PyQt5是对Qt所有类进行封装, Qt能开发的东西, PyQt都能开发. Qt是强大的GUI库之一, 用C++开发, 并且跨平台. PyQt双许可 ...

  8. python爬取京东商品信息代码_Python利用Xpath选择器爬取京东网商品信息

    HTML文件其实就是由一组尖括号构成的标签组织起来的,每一对尖括号形式一个标签,标签之间存在上下关系,形成标签树:XPath 使用路径表达式在 XML 文档中选取节点.节点是通过沿着路径或者 step ...

  9. 登录界面设计及功能实现

    文章目录 1 登录界面设计 1.1 登录界面设计 1.2 登录界面设计要点 1 登录界面设计 1.1 登录界面设计 界面效果如下: 1.2 登录界面设计要点 我们需要先将窗体设置为无边框,然后再设置窗 ...

最新文章

  1. linux rpm找不到命令_Linux安装软件
  2. Dirichlet前缀和及其拓展
  3. docker安装nginx实例
  4. 看美女有助于男士长寿
  5. 51nod 1632 B君的连通
  6. Python装饰器学习笔记 1
  7. 简单的FreeBSD 的内核编译
  8. uml 时序图_程序猿都应学习的语言:看 25 张图学 UML
  9. linux下rust编译环境搭建
  10. weblogic创建多个域 及域的配置方法 war包部署及访问测试
  11. Android高级开发面试题目,再也不用担心不能升职加薪了。
  12. (转)限制字符长度及特殊符号不能输入
  13. Scrcpy - 开源免费在电脑显示手机画面并控制手机的工具 (投屏/录屏/免Root)
  14. linux服务器下安装phpstudy 如何命令行进入mysql
  15. matlab求线性规划最大值,matlab线性规划算例
  16. android外设按键,Android 外接键盘的按键处理
  17. 2022美团CTF个人决赛WP
  18. ArcGIS之栅格地图配准
  19. 如何判断等保测评机构有资质?符合要求?
  20. H5 +蓝牙打印机 CPCL和ESC

热门文章

  1. wxWidgets:wxPropertyGridManager类用法
  2. boost::units模块实现展示信息单元系统
  3. boost::phoenix::ref相关的测试程序
  4. boost::graph模块实现Graphviz DOT 语言阅读器
  5. GDCM:读取和转储DICOMDIR文件的测试程序
  6. boost::container实现从内存资源派生的测试程序
  7. Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序
  8. VTK:可视化之BoxClipStructuredPoints
  9. OpenCV使用filter2D函数填充线性滤波器的实例(附完整代码)
  10. OpenCV特征检测Feature Detection