Python_爬虫1_Requests库入门

server/2024/11/17 4:20:24/

目录

Requests库

7个主要方法

Requests库的get()方法

Response对象的属性

爬取网页的通用代码框架

        理解requests库的异常

HTTP协议及Requests库方法

HTTP协议

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

HTTP协议对资源的操作

理解PATCH和PUT的区别

HTTP协议与Requsets库

Requests库主要方法解析

requests.requst()


Requests库

python">>>> 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()方法

python">r = requests.get(url)

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

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

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

url:获取html的网页的url

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

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

python">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超时,产生超时异常

专门与异常打交道

python">import requests
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()  # 如果不是200,引发HTTPError异常r.encoding = r.apparent_encodingreturn r.textexcept: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()方法
python">r = requests.head('http://httpbin.org/get')
r.headers # 展示反馈头部信息的内容
r.text # 展示全部内容,但发现内容是空

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

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

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

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

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

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

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

python">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:请求方式

python">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中
python">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的内容
python">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的内容
python">kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('POST','http://python123.io/ws', json = kv)
  • headers:字典,HTTP定制头
python">hd = {'user-agent': 'Chrome/10'}
r = requests.request('POST','http://python123.io/ws', headers = hd)
  • cookies:字典或CookieJar,Request中的cookies
  • auth:元组,支持HTTP认证功能
  • files:字典类型,传输文件
python">fs = {'file': open'data.xls', 'rb'}
r = requests.request('POST','http://python123.io/ws', files = fs)
  • timeout:设定超时时间,秒为单位
python">r = requests.request('POST','http://python123.io/ws', timeout = 10)

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

python">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.ppmy.cn/server/142554.html

相关文章

光驱验证 MD5 校验和

步骤 1&#xff1a;在 Ubuntu 上打包文件并生成 MD5 校验和 打包文件 使用 tar 命令将文件夹打包成 tar.gz 文件&#xff1a; tar -czvf my_files.tar.gz /path/to/folder 生成 MD5 校验和 使用 md5sum 命令生成打包文件的 MD5 校验和&#xff1a; md5sum my_files.tar.g…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…

安全见闻4

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最…

【拥抱AI】对比embedding模型gte-Qwen2-7B-instruct和bge-m3:latest(二)

为了更好地理解 gte-Qwen2-7B-instruct 和 bge-m3:latest 在不同任务中的表现&#xff0c;我们可以从以下几个方面进行详细对比&#xff1a; 1. 文本生成 gte-Qwen2-7B-instruct 优势&#xff1a; 指令跟随能力&#xff1a;该模型经过大量指令-响应对的训练&#xff0c;能够…

构建客服知识库:企业效率提升的关键步骤

客服知识库是企业提升客户服务效率和质量的重要工具。它不仅帮助客服团队快速准确地回答客户问题&#xff0c;还能通过数据分析来优化服务流程和提升客户满意度。 1. 明确知识库的目标和范围 构建客服知识库的第一步是明确其目标和范围。这包括确定知识库的主要用户群体、需要…

Rust面向对象特性

文章目录 封装基于特征对象vs基于泛型基于特征对象静态派遣和动态派遣静态派遣&#xff08;Static Dispatch&#xff09;动态派遣&#xff08;Dynamic Dispatch&#xff09; 基于泛型 状态设计模式面向对象的思想rust思想&#xff1a;将状态和行为编码为类型&#xff08;将状态…

leetcode417. Pacific Atlantic Water Flow

Pacific Atlantic Water Flow There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island’s left and top edges, and the Atlantic Ocean touches the island’s right and bottom edges. The …