chapter5-使用网页爬虫取利器—Requests

news2024/11/15 8:28:32

上篇文章我们讲解了使用Python 自带的urllib模块来爬取我们的第一个页面。但是事实上,urllib在现在的互联网公司应用的并不是最多的。今天,我们就来介绍一下目前最为流行,也是最为方面的网络爬虫框架之一的Requests 。

为什么要学习Requests

在回答这个问题之前,我们先介绍一下requests:

Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的,一切动力都来自于根植在 Requests 内部的 urllib3。

这是节选自Requests官方文档的一段话,看上去像是在自卖自夸。事实上,Requests 的确极大地减少了我们的开发和配置工作。其GitHub主页上多达32K的star 也在宣告着它的成功与优秀基因。

为什么要学习Requests呢?对于初学者来说,主要原因是:

  • Requests 在互联网上拥有丰富的学习资源。在百度上搜索“requests 爬虫”关键字,一共有16万多条搜索结果。这意味着Requests 的相关技术已经比较成熟。特别对于初学者而言,一个具有丰富学习材料的内容,能够减少学习中的“挖坑”次数和“掉坑”次数;
  • Requests 官方提供中文文档。这一点对于新人,尤其是英语能力还不是很好的新人来说,是最好的资源。官网文档提供了详细而且非常准确的函数定义与说明。如果开发过程中出现了问题,百度、google、Stack Overflow…所有的搜索方法都试过,但是都不能解决问题的时候,翻阅官方文档是最稳妥,而且是最快捷的解决方案。

Requests初体验

  1. 安装Requests

    因为Requests 是第三方库,因此我们需要手动安装。在CMD 控制台中输入

    pip install requests

    当控制台提示安装成功后,我们进入Python 中,导入Requests,验证是否安装成功。

​ (请原谅我这里的图用的是Linux系统下的截图。当我写到这个部分的时候,我的windows电脑“悲剧”了)

  1. 重写urllib的访问页面的代码

    使用Requests 爬取网页只需要几行代码,复杂程度远远小于urllib

    import requests
    url = "http://gitbook.cn/"
    web_data = requests.get(url)
    web_info = web_data.text
    print(web_info)
    

    让我们运行这个小程序,打印出运行结果:

    ......
    <p>GitChat 是一款基于微信平台的知识分享产品。通过这款产品我们希望改变IT知识的学习方式.</p>
    ......
    

    Amazing!Requests自动帮我们检测编码,并且正常的显示了中文!

    让我们详细的讲解一下这段代码

    import requests
    url = "http://gitbook.cn/"
    web_data = requests.get(url)
    

    上述代码很好理解。第一行代码导入了Requests 这个库,第二行代码定义了我们要爬取的URL,第三行,我们直接调用Requests 中的get()方法,即通过GET访问一个网页

    web_info = web_data.text
    

    当我们发出GET请求后,Requests 会基于 HTTP 头部对相应的编码做出有根据的推测,所以当我们的访问web_data.text 之前,Requests 会使用它推测的文本编码进行解析。

  2. 定制请求头

    什么是请求头呢?http请求头,HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。
    在这里插入图片描述

    还记得我们上一篇文章中提到的“模拟浏览器”的行为吗?没错,浏览器的标志也在请求头中。
    上图就是一个典型的请求头。在Request 中,我们可以很方便的构造自己需要的请求头

    header = {		     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,   */*;q=0.8',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    r = requests.get("http://gitbook.cn/", headers=headers)
    
  3. Cookie的用处

    平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断连接。这时我们就需要一个一直保持会话连接的机制。在session出现前,cookie就完全充当了这种角色。也就是,cookie的小量信息能帮助我们跟踪会话。一般该信息记录用户身份。

    什么是Cookie?简单的说,就是记录你用户名和密码,让你可以直接进入自己账户空间的一组数据。多说无益,我们来亲自实践一下。

    这次我们尝试访问CSDN,首先这是我已经登录之后,显示的个人页面。在这里插入图片描述

    在没有加入Cookie之前,我们尝试访问一下这个页面。

    import requests
    url = "https://my.csdn.net/"
    web_data = requests.get(url)
    web_info = web_data.text
    print(web_info)
    

    运行结果为:

    在这里插入图片描述

结果显示——你要么登录,要么注册。

那么,如果加入了COokie呢?我们首先获取自己的Cookie,如果你使用的是Chrome 浏览器,只需要右击-查看-network,然后刷新一下页面,就可以看到请求头中相对应的Cookie。

在这里插入图片描述

注意!Cookie 数据是十分隐私的个人数据!如果被他人获取到,采用一些常规手段,就可以登录你的相关账号,因此,请不要随意将自己的COokie 信息展示给他人!

让我们再重新修改一下代码

import requests
url = 'https://my.csdn.net/'
header = {
    'Cookie':'此处隐藏个人Cookie',
    'User-Agent' :'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
web_data = requests.get(url,headers=header)
web_info = web_data.text
print(web_info)

运行一下,查看结果

在这里插入图片描述

我们看到,最终爬取的结果中,已经包含了登录时收藏的相关文章!Cookie设置成功!

内容总结

  • 使用Requests 能够将大量原本复杂的开发过程进行简化,方便了我们更关注网页爬取技术本身;

  • 对与请求头,我们可以直接定制,你可以参考这篇文章详细的了解请求头和请求体;

  • Cookie是十分重要的隐私数据,带上Cookie,可以爬取相关账户的信息。不要轻易地将自己的账户Cookie展示给其他人看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1403951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BL120AC 工业空调网关 空调协议转Modbus协议网关

随着物联网技术的迅猛发展&#xff0c;人们深刻认识到在智能化生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的物联网数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

基于jQuery与Spring MVC实现用户密码异步修改的实战演示

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;创建表单1、表单界面2、表单代码3、脚本代码 &#xff08;二&#xff09;后端控制器&#xff08;三&#xff09;测试代码&#xff0c;查看效果1、弹出更改密码表单2、演示更改密码操作 三、实战总结 一、实战概述 …

【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔

项目文件&#xff1b; 【1】 【2】 【3】 【4】 【5】 【6】 【7】 【8】

Redis常见类型及常用命令

目录 常见的数据类型 一、String类型 1、简介 2、常用命令 &#xff08;1&#xff09;新建key &#xff08;2&#xff09;设值取值 ​编辑 &#xff08;3&#xff09;批量操作 &#xff08;4&#xff09;递增递减 3、原子性操作 4、数据结构 二、list类型 1、list常…

【QT+QGIS跨平台编译】之五:【curl+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、curl介绍二、curl下载三、文件分析四、pro文件五、编译实践 一、curl介绍 curl&#xff08;CommandLine Uniform Resource Locator&#xff09;主要功能就是用不同的协议连接和沟通不同的服务器&#xff0c;相当封装了的socket。 libcurl支持http, https, ftp, g…

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列&#xff08;RAID&#xff09;5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层&#xff0c;接…

【工具】SageMath|Ubuntu 22 下 SageMath 极速安装 (2024年)

就一个终端就能运行的东西&#xff0c; 网上写教程写那么长&#xff0c; 稍微短点的要么是没链接只有截图、要么是链接给的不到位&#xff0c; 就这&#xff0c;不是耽误生命吗。 废话就到这里。 文章目录 链接步骤 链接 参考&#xff1a; Install SageMath in Ubuntu 22.04We…

一、防御保护---信息安全概述

一、网络安全防御---信息安全概述 1.信息安全现状及挑战1.1 网络空间安全市场在中国&#xff0c;潜力无穷1.2 数字化时代威胁升级1.3 传统安全防护逐步失效1.4 安全风险能见度不足1.5 缺乏自动化防御手段1.6 网络安全监管标准愈发严苛 2.信息安全概述2.1 简介2.2 常见的网络安全…

R语言批量把数值变量和因子变量的互转

#我们以rms包的lung数据集为例 library(rms) data<-lung #这里有两种方法&#xff0c; #第1是知道需要转化的变量在哪几列&#xff1b; #第2知道需要转化的变量名 str(data) #假设我们想转化inst/status/sex/三个变量的类型 #图1先看看变量类型和处于第几列 str(dat…

旅游项目day14

其他模块数据初始化 搜索实现 请求一样&#xff0c;但是参数不一样&#xff0c;根据type划分。 后台需要提供一个搜索接口。 请求分发器&#xff1a; 全部搜索 目的地搜索 精确搜索、无高亮展示 攻略搜索 全文搜索、高亮显示、分页 游记搜搜 用户搜索 丝袜哥

机器学习笔记 - 基于自定义数据集 + 3D CNN进行视频分类

一、简述 这里主要介绍了基于自定义动作识别数据集训练用于视频分类的 3D 卷积神经网络 (CNN) 。3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。 这里的模型主要基于D. Tran 等人2017年的论文“动作识别的时空卷积研究”。 …

【GitHub项目推荐--基于 Flutter 的游戏引擎】【转载】

Flame 引擎的目的是为使用 Flutter 开发的游戏会遇到的常见问题提供一套完整的解决方案。 目前 Flame 提供了以下功能&#xff1a; 游戏循环 (game loop) 组件/对象系统 (FCS) 特效与粒子效果 碰撞检测 手势和输入支持 图片、动画、精灵图 (sprite) 以及精灵图组 一些简化…

OCP NVME SSD规范解读-7.TCG安全日志要求

在OCP NVMe SSD规格中&#xff0c;TCG的相关内容涉及以下几个方面&#xff1a; 活动事件记录&#xff1a; NVMe SSD需要支持记录TCG相关的持久事件日志&#xff0c;用于追踪固态硬盘上发生的与TCG安全功能相关的关键操作或状态变化&#xff0c;如启动过程中的安全初始化、密钥…

【Python从入门到进阶】47、Scrapy Shell的了解与应用

接上篇《46、58同城Scrapy项目案例介绍》 上一篇我们学习了58同城的Scrapy项目案例&#xff0c;并结合实际再次了项目结构以及代码逻辑的用法。本篇我们来学习Scrapy的一个终端命令行工具Scrapy Shell&#xff0c;并了解它是如何帮助我们更好的调试爬虫程序的。 一、Scrapy Sh…

时间序列预测 — CNN-LSTM-Attention实现多变量负荷预测(Tensorflow):多变量滚动

专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 ​ 所有文章提供源代码、数据集、效果可视化 ​ 文章多次上领域内容榜、每日必看榜单、全站综合热榜 ​ ​ ​ ​ ​ ​ ​ 时间序列预测存在的问题 ​ 现有的大量方法没有真正的预测未…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )

持续集成工具Jenkins的使用之安装篇(一)

Jenkins是一个基于Java开发的开源的一种持续集成工具&#xff0c;主要用于环境部署&#xff0c;监控重复性的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。要想使用它&#xff0c;你就必须的先安装&#xff0c;接下来我们就介绍下J…

第一篇【传奇开心果短博文系列】Python的库OpenCV技术点案例示例:cv2常用功能和方法

传奇开心果短博文系列 短博文系列目录Python的库OpenCV技术点案例示例系列 短博文目录一、前言二、常用功能和方法示例三、归纳总结 短博文系列目录 Python的库OpenCV技术点案例示例系列 短博文目录 一、前言 cv2是Python中常用的第三方库&#xff0c;也称为OpenCV库&#…

web3:B站chainlink课程第五课Wsl安装ubuntu虚拟机

坑了我好久。 https://learn.microsoft.com/zh-cn/windows/wsl/install-manual 按照微软给的这个手动安装的方式来&#xff0c;别想在线了&#xff0c;反正来看这个的肯定是直接 wsl --install成功不了的选手。 注意&#xff01; 步骤6别从Microsoft Store 下载&#xff0c;…

Django开发_16_文件上传

一、通过正常网页端文件上传 &#xff08;一&#xff09;前端&#xff1a;html form表单中添加设置 enctype"multipart/form-data" &#xff08;二&#xff09;后端&#xff1a;views.py 获取上传文件对象 upload_filerequest.FILES.get("文件域名称"…