最详细爬虫零基础教程03——Request库的介绍

文章目录

  • 前言
  • 一、Request库的使用?
  • 二、响应Response中的属性
  • 3.用户代理(User-Agent)


前言

Request库是一个Python的第三方库,用于发送HTTP请求和处理HTTP响应。它提供了简单而方便的接口,使得发送HTTP请求变得容易。

Request库具有以下特点

  • 简单易用:Request库提供了简洁的API,使得发送HTTP请求变得非常简单。只需编写几行代码,就可以发送GET、POST等类型的请求。

  • 支持各种请求方法:Request库支持常见的HTTP请求方法,如GET、POST、PUT、DELETE等。

  • 支持多种协议:Request库支持HTTP协议和HTTPS协议,可以处理普通的HTTP请求和加密的HTTPS请求。

  • 提供丰富的请求参数:Request库允许设置各种请求参数,包括请求头、请求体、查询参数、Cookie等。可以通过设置这些参数,来模拟登录、传递参数等操作。

  • 支持文件上传:Request库支持文件上传,可以方便地上传文件到服务器。

  • 支持会话管理:Request库可以维持一个会话,在多次请求之间保持一些信息的状态,如Cookie等。这样可以实现模拟登录、保持会话等功能。

  • 提供错误处理机制:Request库提供了异常处理机制,可以捕获请求过程中的异常,进行错误处理。

总之,Request库是一个功能强大、易用性高的HTTP请求库,适用于各种爬虫和网络请求的场景。无论是发送简单的GET请求还是复杂的POST请求,Request库都能够满足需求,并且提供了丰富的功能和接口,使得开发变得更加便捷。


一、Request库的使用?

Request库的作用:在爬虫中利用它去发送网络请求
代码演示:

import requests

# 程序入口
if __name__ == '__main__':
    # 1.确定哦url
    url_ = 'https://www.baidu.com/'  # 以字符串的形式呈现

    # 2.发送网络请求
    response_ = requests.get(url_)  #目标的url,利用requests发送网络请求,最终得到一个响应对象
    # print(response_.encoding)  # ISO-8859-1
    # print(response_)  # <Response [200]>   对象的形式

    bytes_data = response_.content
    str_data = bytes_data.decode('utf-8')  # 使用正确的编码方式去解码,将字节数据解码成看得懂的字符数据

    # 仅仅拿到响应对象没有用,我们要的是里面的数据

    print(type(response_.text), response_.text)  # 得到该url对应的相应数据  得到的是字符串类型的数据

    print(type(response_.content), response_.content)  # 得到该url对应的相应数据  但是得到的是字节类型的数据

    # 3.解析数据
	#这里用到的知识我们还没有学习到,因此我们这里就不做过多的介绍,后面再详细叙述。

    # 4.保存
    # 第一种保存方式
    with open('baidu_02.html', 'w', encoding='utf-8') as f:     # 常用的格式:html,json,mp3,MP4,jpg
        f.write(str_data)
	# 第二种保存方式
	# 由于content得到的是字节类型的数据,是二进制模式,因此用wb进行写入,并且不需要encodeing
    with open('baidu_01.html', 'wb') as f:  # 常用的格式:html,json,mp3,MP4,jpg
        f.write(bytes_data)

结果
正确结果

二、响应Response中的属性

分类

  • 1.respose.text 响应str类型
  • 2.response.content 响应tybes类型
  • 3.response.status_code 响应状态码
  • 4.response.request.headers 响应对象的请求头
  • 5.response.headers 响应头
  • 6.response.request.cookie 响应对象请求的cookie
  • 7.response.cookie 响应cookie (经历了set-cookie)

代码演示:

if __name__ == '__main__':
    # 1.确定哦url
    url_ = 'https://www.baidu.com/'  # 以字符串的形式呈现

    # 2.发送网络请求
    response = requests.get(url_)
    print(response.status_code)  # 响应状态码  200成功  301跳转  400页面找不到  500服务器出现问题
    
    print(response.request.headers)  # 响应对象的请求头,响应对象还包括了我们的请求信息(已经被服务端解析了一次的请求信息)

    # {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

    # 正常访问浏览器  用户代理(代表请求者的身份)(重点)
    # User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36

    print(response.headers)  # 响应头
    # {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sun, 17 Mar 2024 06:25:15 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:24:17 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}

    # 响应对应请求的cookie
    print(response.request._cookies)  # <RequestsCookieJar[]> CookieJar对象

    # 响应对象的Cookie(经历了set-Cookie动作)
    print(response.cookies)  # <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

3.用户代理(User-Agent)

定义:用户代理(User Agent)是指在网络中使用HTTP协议的客户端,通常是指网络浏览器。用户代理在发送请求时会在请求头中包含一个User-Agent字段,用来标识发送请求的客户端的信息。
作用

  1. 标识客户端:用户代理可以告诉服务器发送请求的客户端是什么类型的设备,例如是PC端的浏览器、移动端的浏览器还是爬虫程序。服务器可以根据不同的用户代理来返回不同的页面或者进行不同的处理。

  2. 支持不同的内容格式:用户代理可以告诉服务器它所支持的内容格式,如HTML、XML、JSON等。服务器可以根据用户代理的设置来返回适合的内容格式。

  3. 适配不同设备:用户代理可以告诉服务器发送请求的客户端的设备特性,如屏幕尺寸、分辨率、操作系统等。服务器可以根据这些信息进行适配,返回适合不同设备的页面或者资源。

  4. 防止网站屏蔽或限制:有些网站可能会根据特定的用户代理来屏蔽或限制访问。通过设置合适的用户代理,可以绕过这些限制。

  5. 跟踪用户行为:用户代理中的User-Agent字段还可以包含一些其他的信息,如操作系统版本、浏览器版本等。这些信息可以被网站用于跟踪用户的行为。

在爬虫中我们为什么要使用用户代理:

假设一种情况,我们需要爬取某网页的数据,就需要去填写http协议,这里面就包含了用户代理的各种信息。但是在爬虫中,我们往往不会只取一个或者两个数据,我们需要的是得到大量的数据,但是服务器并不傻,我们用一个用户在短时间内多次访问,比如1s访问100次,那么显然这不是一个正常的人可以做到的,很容易被检测出是一个爬虫程序,从而禁止我们进行访问,这就是服务端的反爬。在这种情况下我们就不得不去换用户代理,因此在一次性多次访问统一页面的时候,需要不断去更换用户代理,才能尽可能避免去被检测。

那么又有一个新的问题,我们再上面也进行了网页数据的爬取,没有使用用户代理,那我们为什么还可以得到数据呢?

这就可能对于不同的网站有不同的效果,有的网站会返回给你一些不重要的数据进行敷衍一下,而有的网站更可怕的是会返回给你一些错误的数据,因此用户代理就显得尤为重要了。

代码实现:

if __name__ == '__main__':
    # 1.确定哦url
    url_ = 'https://www.baidu.com/'  # 以字符串的形式呈现

    # 2.1通过User-Agent,隐藏爬虫身份
    # 利用键值对:{'User-Agnet':'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'}
    # 注意点1:横杠必须是英文状态下的
    # 注意点2:横杠前后不能加空格,键值前面也不能有空格
    # 注意点3:键名和键值都必须要有引号
    # 注意点4:User-Agent首字母必须大写
    # 注意点5:用户代理和代理IP不是同一个概念,用户代理代表客户端身份,代理Ip代表的是一个IP地址
    headers_ = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
    }

    # 2.发送网络请求
    response_ = requests.get(url_, headers=headers_)  # 目标的url,利用requests发送网络请求,最终得到一个响应对象

    bytes_data = response_.content
    str_data = bytes_data.decode('utf-8') 
    # 4.保存
    with open('baidu_03.html', 'w', encoding='utf-8') as f:  # 常用的格式:html,json,mp3,MP4,jpg
        f.write(str_data)  # 这样我们就可以得到完整的数据了

User-Agent对于服务端是一个反爬点,对于爬虫来说是一个模拟正常用户的一部分

结果展示
成功过爬取
每个梦想,都是在现实中坚持不懈才实现的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV(七)——灰度图像的阙值处理以及图像的边界填充

灰度图像的阙值处理 在OpenCV中利用threshold()对灰度图像进行阙值处理&#xff0c;该函数通过将图像中的每个像素值与一个给定的阈值进行比较来工作。如果像素值超过这个阈值&#xff0c;那么像素值将被设置成指定的最大值&#xff1b;如果没有超过阈值&#xff0c;则根据不同…

C语言例:设 int a=11; 则表达式 a+=a-=a*a 的值

注&#xff1a;软件为VC6.0 代码如下&#xff1a; #include<stdio.h> int main(void) {int a11, b;b (aa-a*a); //a*a121 -->a-121结果为a-110 -->a-110结果为a-220printf("表达式aa-a*a 的值为&#xff1a; %d\n",b);return 0; } //优先级&#x…

组播协议详解

1.组播基础 &#xff08;1&#xff09;组播简介 &#xff08;2&#xff09;组播的地址 &#xff08;3&#xff09;组播的MAC地址 &#xff08;4&#xff09;组播的MAC地址 &#xff08;5&#xff09;反向转发路径—RPF 2.IGMP &#xff08;1&#xff09;简介 &#xff0…

vite ts vue 项目提示 . Projects must list all files or use an include pattern.

vite ts vue 项目提示 . Projects must list all files or use an include pattern. 在引用一个 ts 的时候&#xff0c;提示如下&#xff1a; 需要在 tsconfig.node.json 文件中添加&#xff1a; {"compilerOptions": {"composite": true,"skipLibC…

【LLM】LLama2模型(RMSNorm、SwiGLU、RoPE位置编码)

note 预训练语言模型除了自回归&#xff08;Autoregressive&#xff09;模型GPT&#xff0c;还有自编码模型&#xff08;Autoencoding&#xff09;BERT[1]、编-解码&#xff08;Encoder-Decoder&#xff09;模型BART[67]&#xff0c;以及融合上述三种方法的自回归填空&#xf…

一文速通ESP32(基于MicroPython)——含示例代码

ESP32 简介 ESP32-S3 是一款集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE) 的 MCU 芯片&#xff0c;支持远距离模式 (Long Range)。ESP32-S3 搭载 Xtensa 32 位 LX7 双核处理器&#xff0c;主频高达 240 MHz&#xff0c;内置 512 KB SRAM (TCM)&#xff0c;具有 45 个可编程 GPIO 管…

ttkbootstrap界面美化系列之简介(一)

一&#xff1a;前言 相信很多同学用Python进行界面设计第一个用到的就是Tkinter&#xff0c;Tkinter是Python的一个标准接口&#xff0c;用于创建GUI&#xff08;图形用户界面&#xff09;应用程序。它是Tcl/Tk的封装&#xff0c;Tkinter的名称来源于Tk技术工具包(Tool…

2024 Mazing 3 中文版新功能介绍Windows and macOS

iMazing 3中文版(ios设备管理软件)是一款管理苹果设备的软件&#xff0c; Windows 平台上的一款帮助用户管理 IOS 手机的应用程序。iMazing中文版与苹果设备连接后&#xff0c;可以轻松传输文件&#xff0c;浏览保存信息等&#xff0c;软件功能非常强大&#xff0c;界面简洁明晰…

Outlook API发送邮件的方法?如何设置接口?

如何使用Outlook API发送电子邮件&#xff1f;怎么调用API接口&#xff1f; 为了满足更高级别的需求&#xff0c;我们可能需要通过编程的方式来操作Outlook&#xff0c;这时候&#xff0c;Outlook API就显得尤为重要了。那么&#xff0c;如何使用Outlook API发送邮件呢&#x…

Linux下的多线程编程:原理、工具及应用(3)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Flower of Life—陽花 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶️ ☰ …

从零到一构建短链接系统(五)

1.修改UserService Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserDO> implements UserService {public UserRespDTO getUserByUsername(String username) {LambdaQueryWrapper<UserDO> queryWrapper Wrappers.lambdaQuery(UserDO.c…

【python】集合

前言 简洁整理&#xff0c;无废话 集合概念 含义&#xff1a;跟数学中的基本一样 形式&#xff1a;{1,a,(1,2)} 性质&#xff1a;不重复性&#xff0c;集合中每个元素不会有重复&#xff1b;集合中必须是不可变元素&#xff0c;不能有列表可以有元组 创建&#xff1a;{}或…

如何引入ElementUI组件库,快速上手Element

前言&#xff1a;在上篇文章中分享了如何快速上手Vue框架项目&#xff0c;本篇文章则介绍的是Element的使用&#xff0c;通过本篇文章的分享&#xff0c;我们就可以将Vue和Element结合使用&#xff0c;快速构建出精美的网页界面 目录 一.Element和ElementUI 二.如何引入Eleme…

算法打卡day19|二叉树篇08|Leetcode 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

算法题 Leetcode 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 大佬视频讲解&#xff1a;二叉搜索树的最近公共祖先视频讲解 个人思路 昨天做过一道二叉树的最近公共祖先&#xff0c;而这道是二叉搜索树&#xff0c;那就要好好利用这个有序的特点…

Luckysheet + Exceljs:H5实现Excel在线编辑、导入、导出及上传服务器的示例代码(完整版demo)

创建xeditor.html <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>Hello World!</title><!-- <link relstylesheet href./luckysheet/plugins/css/pluginsCss.css /><link relstylesheet href./luck…

【嵌入式实践】【芝麻】【硬件篇-3】从0到1给电动车添加指纹锁:光耦+继电器电路设计及讲解

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

Chapter 13 Techniques of Design-Oriented Analysis: The Feedback Theorem

Chapter 13 Techniques of Design-Oriented Analysis: The Feedback Theorem 从这一章开始讲负反馈Control系统和小信号建模. 13.2 The Feedback Theorem 首先介绍 Middlebrook’s Feedback Theorem 考虑下面负反馈系统 传输函数 Guo/ui G ( s ) u o u i G ∞ T 1 T G…

7.Java整合MongoDB—项目创建

整合MongoDB MongoDB的基本知识有所了解之后&#xff0c;我们开始着手上代码了&#xff0c;进来先来项目创建&#xff0c;如何引入mongodb&#xff0c;以及测试一下能否连接数据库。 1 新建springboot项目 其实只需要spring boot mongodb这个依赖就行&#xff0c;加那么多纯属…

sparksql简介

什么是sparksql sparksql是一个用来处理结构话数据的spark模块&#xff0c;它允许开发者便捷地使用sql语句的方式来处理数据&#xff1b;它是用来处理大规模结构化数据的分布式计算引擎&#xff0c;其他分布式计算引擎比较火的还有hive&#xff0c;map-reduce方式。 sparksql…

基于单片机的智能小车泊车系统设计

摘 要:随着信息技术的进步,汽车逐渐朝着安全、智能方向发展,智能泊车系统的出现不仅能帮助人们更加快速、安全地完成泊车操作,而且适用于狭小空间的泊车操作,降低驾驶员泊车负担,减轻泊车交通事故发生率。文章基于单片机设计自动泊车系统,以单片机为核心来实现信息收集及…