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)
相关推荐
小小张说故事1 小时前
Python 的 a[1:5:2] 到底切出了什么?拆开 slice 对象、__getitem__ 与负步长那次反向
python
wuyk5551 小时前
PyQt6-第15讲-数据可视化QChart
python·ui·信息可视化·pyqt
天天被压力1 小时前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python
日日大王学编程1 小时前
2026主流AI Agent产品分类、核心差异与技术特性全解析
人工智能·后端·python
天天被压力1 小时前
【A股分钟级高频数据完全手册 #03】股票历史1分钟K线数据接口怎么用:Pro版批量拉取与本地缓存
java·人工智能·python
武天旭17 小时前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
视觉小萌新18 小时前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
小小张说故事19 小时前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
用户114818678948420 小时前
水印的实现方式逻辑
前端·python
贾公子20 小时前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python