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 小时前
PyTorch强化学习实战——融合人类示范数据的高效强化学习
人工智能·pytorch·python·深度学习·强化学习
聪明蛋子哟2 小时前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
李妍.2 小时前
PyTorch GPU 版安装记录(RTX 5060 + Python 3.14)
人工智能·pytorch·python
90后的晨仔2 小时前
Python 基础语法完整汇总
python
广慈新医知2 小时前
当健康问题越来越复杂,AI更适合先帮我们“把问题问清楚”
人工智能·python
一晌小贪欢2 小时前
python-第27天:Python面向对象详解
开发语言·python·数据可视化·面向对象·python办公
青 春 记 忆2 小时前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
智购科技自动售卖机厂家3 小时前
2026自动售货机库存热力图分析:从设备分布到补货优先级的数据可视化实践~YH
大数据·python·信息可视化
鹿鹿学长4 小时前
微软把语音转写打到 0.1 美元/小时:5 个月降价 72%,AI 音频进入地板价时代
python·自动化