requests--爬取网页内容

requests简介

相比urllib和urllib3,更好的方案是使用requests。它是一个Python第三方库,处理URL资源特别方便。

Keep-Alive & 连接池

国际化域名和 URL

带持久 Cookie 的会话

浏览器式的 SSL 认证

自动内容解码

基本/摘要式的身份认证

优雅的 key/value Cookie

自动解压

Unicode 响应体

HTTP(S) 代理支持

文件分块上传

流下载

连接超时

分块请求

支持 .netrc

requests库常用模块

|-------------------|----------------------------|
| 模块名称 | 描述 |
| requests.Request | 表示请求对象,用于准备一个请求发送到服务器。 |
| requests.Response | 表示响应对象,其中包含服务器对HTTP请求的响应。 |
| requests.Session | 表示请求会话,提供Cookie持久性、连接池和配置。 |

Request类的对象表示一个请求,它的生命周期针对一个客户端请求,一旦请求发送完毕,该请求包含的内容就会被释放掉。

Session类的对象可以跨越多个页面,它的生命周期同样针对的是一个客户端。

requests库初体验

urllib发送get请求

python 复制代码
# 导入请求和解析模块
import urllib.request
import urllib.parse
# 请求的URL路径和查询参数
url = "http://www.baidu.com/s"
word = {"wd":"Python网络爬虫"}
# 转换成url编码格式(字符串)
word = urllib.parse.urlencode(word) 
# 拼接完整的URL路径
new_url = url + "?" + word
# 请求报头
headers ={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
# 根据URL和headers构建请求
request = urllib.request.Request(new_url, headers = headers)
# 发送请求,并接收服务器返回的文件对象
response = urllib.request.urlopen(request)
# 使用read方法读取获取到的网页内容,使用UTF-8格式进行解码
html = response.read().decode('UTF-8')
print(html)

requests发送get请求

python 复制代码
# 导入requests库
import requests
# 请求的URL路径和查询参数
url = "http://www.baidu.com/s"
param = {"wd": "Python网络爬虫"}
# 请求报头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) 
AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/51.0.2704.103 Safari/537.36"
}
# 发送GET请求,返回一个响应对象
response = requests.get(url, params=param, headers=headers)
# 查看响应的内容
print(response.text)

便捷之处:

无须再转换为URL路径编码格式,拼接完整的URL路径。

无须再频繁地为中文转换编码格式。

从发送请求的函数名称,可以很直观地判断发送到服务器的方式。

发送HTTP请求的函数

|--------------------|-------------------------------------|
| 函数 | 功能 说明 |
| requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
| requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET请求方式 |
| requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD请求方式 |
| requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST请求方式 |
| requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT请求方式 |
| requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH请求方式 |
| requests.delete() | 向HTML网页提交删除请求,对应于HTTP的DELETE请求方式 |

这些函数都会做两件事情

1、构建一个Request类的对象,该对象将被发送到某个服务器上请求或者查询一些资源;

2、一旦得到服务器返回的响应,就产生一个Response对象,该对象包含了服务器返回的所有信息,也包括原来创建的Request对象。

requests的response响应

Response类用于动态地响应客户端的请求,控制发送给用户的信息,并且将动态地生成响应,包括状态码、网页的内容等。

|-------------------|-------------------------------|
| 属性 | 说明 |
| status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
| text | HTTP响应内容的字符串形式,即URL对应的页面内容 |
| encoding | 从HTTP请求头中猜测的响应内容编码方式 |
| apparent_encoding | 从内容中分析出的响应编码的方式(备选编码方式) |
| content | HTTP响应内容的二进制形式 |

当请求发出之后,Requests库可以找出它使用了什么编码,并且可以设置encoding 属性进行改变。

python 复制代码
>>> response.encoding
'utf-8'
>>> response.encoding = 'ISO-8859-1'

再次调用text属性获取返回的文本内容时,将会使用上述设置的新的编码方式。

案例--搜索豆瓣电影

python 复制代码
# 导入requests库
import requests
# 请求的URL路径和查询参数
#https://search.douban.com/movie/subject_search?search_text=python&cat=1002&start=30
page = 3
url = "https://search.douban.com/movie/subject_search"
param = {"search_text": "Python","start":15*(page-1),"cat":1002}
# 请求报头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) "
                         "AppleWebKit/537.36 (KHTML, like Gecko) "
                         "Chrome/51.0.2704.103 Safari/537.36"
}
# 发送GET请求,返回一个响应对象
response = requests.get(url, params=param, headers=headers)
# 查看响应的内容
print(response.text)
with open("douban.html", "w", encoding="utf-8") as f:
    f.write(response.text)
相关推荐
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时3 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1234 天前
2026年第38周GitHub趋势周报
python·科技·github
IZero074 天前
Jev 与 Laya
python·语言模型