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)
相关推荐
破茧蝴蝶6 小时前
Python分布式爬虫完整教程
开发语言·python
benchmark_cc6 小时前
量化系统架构设计:为什么应该将数据获取与策略逻辑解耦?
python·数据分析·pandas·量化交易·股票数据·quantdash
凤山老林7 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
小白快快跑哦7 小时前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
Thinker QAQ7 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
道满科技7 小时前
Function Calling 参数总出错?只修参数就行
linux·windows·python
霸道流氓气质8 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
ch62310 小时前
《AI 辅助编程实战:从零跑通一个 Excel 报表生成脚本的踩坑与复盘》
人工智能·python
import_random11 小时前
[python]conda和pip(区别和联系2)
python
Aurorar0rua11 小时前
CS50 x 2024 Notes Python - 01
开发语言·python·学习方法