Python_爬虫1_Requests库入门

news2024/11/18 14:35:54

目录

Requests库

7个主要方法

Requests库的get()方法

Response对象的属性

爬取网页的通用代码框架

        理解requests库的异常

HTTP协议及Requests库方法

HTTP协议

HTTP协议采用URL作为定位网络资源的标识。

HTTP协议对资源的操作

理解PATCH和PUT的区别

HTTP协议与Requsets库

Requests库主要方法解析

requests.requst()


Requests库

>>> import requests

# 获取网页
>>> r = requests.get("http://www.baidu.com")

# 获取网页状态码,200表示成功
>>> print(r.status_code)
200

>>> type(r)
<class 'requests.models.Response'>

>>> r.headers
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, ection': 'Keep-Alive', 'Transfer-Encoding': 'chunked', 'Server':}

7个主要方法

方法说明
requests.requst()构造一个请求,最基本的方法,是下面方法的支撑
requests.get()获取HTML网页,对应HTTP中的GET方法
requests.post()向HTML网页提交POST信息,对应HTTP中的POST方法
requests.head()获取HTML网页的头信息,对应HTTP中的HEAD方法
requests.put()向HTML提交PUT方法,对应HTTP中的PUT方法
requests.patch()向HTML网页提交局部请求修改的的请求,对应HTTP中的PATCH方法
requests.delete()向HTML提交删除请求,对应HTTP中的DELETE方法

Requests库的get()方法

r = requests.get(url)

1、构造一个向服务器请求资源的Request对象 \Rightarrow Request

2、返回一个包含服务器资源的Response对象 \Rightarrow Response \Rightarrow Response对象包含爬虫返回的内容

requests.get(url,params=None,**kwargs)

url:获取html的网页的url

params:url中的额外的参数,字典或字节流格式,可选

**kwargs:12个控制访问的参数

def get(url,params=None,**kwargs):
    """Send a GET request.
    
    :param url: URL for the new :class:'Request' object.
    :param params: (optional) Dictionary or bytes to be sent in the query string for the
    :param \*\*kwargs: Optional arguments that ''request'' takes.
    :return: class:'Request <Request>' object
    :rtype: requests.Request
    """

    kwargs.setdefault('allow_radirects', True)
    return request('get', url, params=params, **kwargs)

Response对象的属性

属性说明
r.status_codeHTTP请求返回状态码,200表示连接成功,404表示失败
r.textHTTP响应的字符串形式,即,url对应的页面内容
r.encoding从HTTP header中猜测的响应内容的编码方式
r.apparent_encoding从内容中分析响应内容的编码方式(备选编码方式)
r.contentHTTP响应内容的二进制形式

r.encoding:如果header中不存在charset,则认为编码为 ISO-8859-1。

r.apparent_encoding:根据网页内容分析出的编码方式。


爬取网页的通用代码框架

理解requests库的异常
异常说明
requests.ConnectionError网络连接异常,如DNS查询失败,拒绝连接等
requests.HTTPErrorHTTP错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects超过最大重定向次数,产生重定向异常
requests.ConnectTimeout连接远程服务器超时异常
requests.Timeout请求URL超时,产生超时异常

专门与异常打交道

import requests
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()  # 如果不是200,引发HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"

if __name__ == "__main__":
    url = "http://www.daidu.dom"
    print(getHTMLText(url))

爬取网页的通用代码框架最大的作用是能够使用户访问或爬取网页变得更有效更稳定更可靠


HTTP协议及Requests库方法

HTTP协议

HTTP,Hypertext Transfer Protocol,超文本传输协议。

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议。

请求与响应:用户发起请求,服务器做相关响应。

无状态:第一次跟第二次请求之间并没有相关的关联。

应用层协议:该协议工作再TCP协议之上。

HTTP协议采用URL作为定位网络资源的标识。

URL格式:http://host[:post][path]

host:合法的Internet主机域名或IP地址

port:端口号,缺省端口为80

path:请求资源的路径

HTTP URL实例:

http://www.bit.edu.cn

http://220.181.111.188/duty

HTTP URL理解:

URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。

HTTP协议对资源的操作

方法说明
GET请求获取URL位置的资源
HEAD请求获取URL位置资源的响应消息报告,即获取该资源的头部消息
POST 请求向URL位置的资源后附加新的数据
PUT请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE请求删除URL位置存储的资源

理解PATCH和PUT的区别

假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段。

需求:用户修改了UserName,其他不变。

  • 采用PATCH,仅向URL提交UserName的局部更新请求。
  • 采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除。

PATCH的最主要好处:节省网络带宽

HTTP协议与Requsets库

HTTP协议方法Requsets库方法功能一致性
GETrequests.get()一致
HEADrequests.post()一致
POSTrequests.head()一致
PUTrequests.put()一致
PATCHrequests.patch()一致
DELETErequests.delete()一致
Requsets库的head()方法
r = requests.head('http://httpbin.org/get')
r.headers # 展示反馈头部信息的内容
r.text # 展示全部内容,但发现内容是空

head()方法可以用很少的网络流量获取网络资源的概要信息。

Requsets库的post()方法
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('http://httpbin.org/post', data = payload)
print(r.text)

当我们向UPL去POST一个字典,或者POAT键值对的时候,那么键值对会默认地被存储到表单的字段下。

r = requests.post('http://httpbin.org/post', data = 'ABC')
print(r.text)

如果我们不提交键值对,就提交一个字符串ABC,那么我们就发现ABC被存到了data的相关的字段下。

post方法根据用户提交内容的不同在服务器上会做数据的相关的整理。

put方法也是一样,它与post方法类似,只不过它能够将原有的数据覆盖掉。

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.put('http://httpbin.org/post', data = payload)
print(r.text)


Requests库主要方法解析

requests.requst()

requests.requst(method,url,**kwargs)

method:请求方式,对应get/put/post等7种

url:拟获取页面的url链接

**kwargs:控制访问的参数,共13个

method:请求方式

r = requests.requst('GET',url,**kwargs)
r = requests.requst('HEAD',url,**kwargs)
r = requests.requst('POST',url,**kwargs)
r = requests.requst('PUT',url,**kwargs)
r = requests.requst('PATCH',url,**kwargs)
r = requests.requst('delete',url,**kwargs)
r = requests.requst('OPTIONS',url,**kwargs)

OPTIONS,事实上是向服务器获取一些服务器跟客户端能够打交道的参数,这里面并不与获取资源直接相关,因此平时中使用的少。

**kwargs:控制访问的参数,均为可选项

  • params:字典或字节序列,作为参数增加到url中
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('http://python123.io/ws', params = kv)
print(r.url)

# 运行结果 http://python123.io/ws?key1=value1&key2=value2
  • data:字典、字节序列或文件对象,作为Request的内容
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('POST','http://python123.io/ws', data = kv)
body = '主体内容'
r = requests.request('POST','http://python123.io/ws', data = body)
  • json:JSON格式的数据,作为Request的内容
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('POST','http://python123.io/ws', json = kv)
  • headers:字典,HTTP定制头
hd = {'user-agent': 'Chrome/10'}
r = requests.request('POST','http://python123.io/ws', headers = hd)
  • cookies:字典或CookieJar,Request中的cookies
  • auth:元组,支持HTTP认证功能
  • files:字典类型,传输文件
fs = {'file': open'data.xls', 'rb'}
r = requests.request('POST','http://python123.io/ws', files = fs)
  • timeout:设定超时时间,秒为单位
r = requests.request('POST','http://python123.io/ws', timeout = 10)

proxies:字典类型,设定访问代理服务器,可以增加登录认证

pxs = { 'http':'http://user:pass@10.10.10.1:1234',
        'https','http://10.10.10.1:4321'}
r = requests.request('POST','http://python123.io/ws', proxies = pxs)
  • allow_redirects:True/False,默认为True,重定向开关
  • stream:True/False,默认为True,获取内容立即下载开关
  • verify:True/False,默认为True,认证SSL证书开关
  • cert:本地SSL证书路径

requests.get()

requests.get(url,params=None,**kwargs)

url:获取页面中的url链接

params:url中的额外参数,字典或字节流格式,可选

**kwargs:12个控制访问的参数(request中除了params参数之外的)

requests.head()

requests.head(url,**kwargs)

url:拟获取页面中的url链接

**kwargs:13个控制访问的参数(与request一样)

requests.post()

requests.post(url,data = None, json = None,**kwargs)

url:拟更新页面的url链接

data:字典、字节序列或文件,Request的内容

json:JSON格式的数据,Request的内容

**kwargs:11个控制访问的参数(除了data和json,其他11个request一样的参数放最后)

requests.put()

requests.put(url,data = None,**kwargs)

url:拟更新页面的url链接

data:字典、字节序列或文件,Request的内容

**kwargs:12个控制访问的参数(除了data,其他12个request一样的参数放最后)

requests.patch()

requests.patch(url,data = None,**kwargs)

url:拟更新页面的url链接

data:字典、字节序列或文件,Request的内容

**kwargs:12个控制访问的参数(除了data,其他12个request一样的参数放最后)

requests.delete()

requests.delete(url,**kwargs)

url:拟删除页面的url链接

**kwargs:13个控制访问的参数(request一样)

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

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

相关文章

从客户需求视角去认识ZLG | 边缘计算网关多种应用

在工业领域&#xff0c;串行总线与EtherNET总线广泛应用&#xff0c;物联网的兴起带来众多智能应用。尽管应用多样&#xff0c;但底层技术逻辑却殊途同归&#xff0c;本文将介绍ZLG致远电子串行总线和EtherNET总线之间的联动应用。 本文将从系统集成需求出发&#xff0c;以ZLG致…

Koa进阶:掌握中间件和参数校验的艺术

目录 一、首先下载依赖 二、在index.js中引入koa-parameter&#xff0c;一般挂载这个中间件时会放在注册请求体的后面 三、使用实例 四、如果跟我们所需求的参数不同&#xff0c;返回结果直接会返回422 koa-parameter一般是用来校验请求传过来的参数是否是自己所需要的的 G…

Linux下使用miniconda构建python运行环境

文章目录 miniconda安装构建python运行环境 miniconda安装 miniconda在linux环境下载安装&#xff1a; # Linux环境下使用wget命令下载选定的miniconda # 这里使用的是清华镜像&#xff0c;这个命令每次下载的是最新版本的miniconda wget -c https://mirrors.tuna.tsinghua.e…

解决failed to execute PosixPath(‘dot‘) 或者GraphViz‘s executables not found

在网上找了很多方法都没解决&#xff0c;所以写一篇文章帮助和我遇到同样问题的人 解决方法&#xff1a; 因为python解释器会解释转移字符&#xff0c;因此在环境变量中把\bin换成\\bin即可 解决过程&#xff1a; 系统&#xff1a;win10 已安装pip install graphviz&#xff0…

Deep-Live-Cam -面部交换、视频深度伪造

文章目录 一、关于 Deep-Live-Cam免责声明 二、安装&#xff08;Windows/Nvidia&#xff09;安装&#xff08;手动&#xff09;基本安装&#xff08;CPU&#xff09; GPU加速&#xff08;可选&#xff09;CUDA执行提供商&#xff08;Nvidia&#xff09;CoreML执行提供商&#x…

计算机毕业设计Python美食推荐系统 美团爬虫 美食可视化 机器学习 深度学习 混合神经网络推荐算法 Hadoop Spark 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Scala-数据类型-概述(Scala 3.x 类型层次结构)

Scala Scala-数据类型 Scala1. Any — 顶级类型2. Matchable — 匹配类型3. AnyVal — 值类型的父类4. AnyRef — 引用类型的父类5. Null - 引用类型的子类型Tips: 为什么 null 不推荐使用&#xff1f; 6. Nothing - 底层类型 (Bottom Type)整理不易&#xff0c;对您有帮助的话…

嵌入式linux中红外接收基本方法分析

大家好,今天主要给大家分享一下,如何使用Linux系统中的红外接收驱动控制方法。 第一:Linux红外基本简介 红外遥控是我们常见的一种无线收发设备,具有抗干扰能力强,功耗低,成本低,易实现等优点。被很多电子设备特别是家用电器广泛采用,如电视遥控、空调遥控等。红外遥控…

AWTK-WIDGET-WEB-VIEW 实现笔记 (2) - Windows

在 Windows 平台上的实现&#xff0c;相对比较顺利&#xff0c;将一个窗口嵌入到另外一个窗口是比较容易的事情。 1. 创建窗口 这里有点需要注意&#xff1a; 父窗口的大小变化时&#xff0c;子窗口也要跟着变化&#xff0c;否则 webview 显示不出来。创建时窗口的大小先设置…

pgAdmin简单介绍

pgAdmin介绍 官网&#xff1a;https://www.pgadmin.org/ pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world. pgAdmin may be used on Linux, Unix…

Linux笔记---调试工具GDB(gdb)

1. gdb的概念 GDB&#xff0c;全称GNU Debugger&#xff0c;是一个功能强大的开源调试工具&#xff0c;广泛用于Unix和类Unix系统&#xff0c;以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况&#xff0c;帮助定位和修复程序中的错误。 gd…

如何在 Ubuntu 上安装 Mattermost 团队协作工具

简介 Mattermost 是一个开源、自托管的通信平台&#xff0c;专为团队协作设计。它类似于 Slack&#xff0c;提供聊天、消息传递和集成功能。Mattermost 在重视数据隐私的组织中特别受欢迎&#xff0c;因为它允许团队在自己的服务器上管理通信。以下是 Mattermost 的一些关键特…

2. Django中的URL调度器 (自定义路径转换器)

在 Django 中&#xff0c;URL 路由通常使用路径转换器&#xff08;path converters&#xff09;来匹配和捕获 URL 中的特定模式&#xff0c;例如整数、字符串或 slug 等。默认情况下&#xff0c;Django 提供了一些内置的路径转换器&#xff0c;如 <int>、<str>、&l…

【STM32】USB 简要驱动软件架构图

STM32 USB 软件架构比较复杂&#xff0c;建议去看 UM 1734 或者 st wiki STM32 USB call graph STM32 USB Device Library files organization Reference [1]: https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Introduction_to_USB_with_STM32 [2]: UM1734

MATLAB 使用教程 —— 命令窗口输入命令,工作区显示变量

命令在命令窗口输入变量在工作区显示 MATLAB 桌面包含的面板如下&#xff1a; 当前文件夹 - 此面板允许访问项目文件夹和文件。命令窗口 - 这是主要区域&#xff0c;用户在命令行中输入命令&#xff0c;命令提示符(>>).工作区 - 工作区显示所有变量&#xff0c;无论是创…

华为USG5500防火墙配置NAT

实验要求&#xff1a; 1.按照拓扑图部署网络环境&#xff0c;使用USG5500防火墙&#xff0c;将防火墙接口加入相应的区域&#xff0c;添加区域访问规则使内网trust区域可以访问DMZ区域的web服务器和untrust区域的web服务器。 2.在防火墙上配置easy-ip&#xff0c;使trust区域…

时钟之CSS+JS版

写在前面 此版本绘制的时钟基于CSSJS模式。 优点操作简单&#xff0c;缺点当然是不够灵活。下一篇会基于HTML5的canvas标签&#xff0c;使用JS绘制。会更灵活&#xff0c;元素更加丰富。 HTML代码 <div class"box"><article class"clock"><…

blender 骨骼的动画基础 笔记总结

一、世界纹理 1.首先打开Node Wrangler&#xff08;世界纹理&#xff09;插件 在编辑的偏好设置这里&#xff0c; 演示一下这个插件&#xff1a; 然后通过shift a添加环境纹理 对其连接颜色后&#xff0c;选中世界纹理&#xff0c;通过按键ctrl t 二、动画 点击动画 1.…

java ssm 健康医馆管理系统 中医馆管理 健康平台 药店 源码jsp

一、项目简介 本项目是一套基于SSM的健康医馆管理系统&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#x…

前端无感刷新token

摘要&#xff1a; Axios 无感知刷新令牌是一种在前端应用中实现自动刷新访问令牌&#xff08;access token&#xff09;的技术&#xff0c;确保用户在进行 API 请求时不会因为令牌过期而中断操作 目录概览 XMLHttpRequestAxiosFetch APIJQuni.request注意事项&#xff1a; 访问…