Python 网络爬虫 —— requests 库和网页源代码
一、requests 库的安装
在 Python 里,requests
库是第三方库,需手动安装 。操作很简单,打开命令提示符(Windows)或终端(Mac、Linux),输入 pip install requests
,回车执行,就能自动下载安装 。安装后,想确认是否成功,可输入 pip show requests
,会显示版本、安装路径等信息,帮你验证安装结果 。
二、网页源代码是什么
当用浏览器访问网页,服务器会返回一堆代码,这就是网页源代码,它以 HTML 为基础,还可能混有 CSS、JavaScript 代码 。HTML 搭建网页结构,像标题、段落、图片位置;CSS 负责美化,控制颜色、排版;JavaScript 让网页交互,比如按钮点击特效 。
比如在浏览器(以 Chrome 为例 ),打开网页后右键选 “查看页面源代码”,就能看到这堆代码 。不过要注意,有些动态加载内容(像靠 JavaScript 异步获取的数据 ),源代码里可能没有,得用 “检查”(浏览器开发者工具 )查看渲染后的内容才能找到 。简单说,网页源代码是网页 “底层构造蓝图”,requests
库能帮我们获取这份 “蓝图”,方便进一步提取数据
在网络爬虫学习里,requests
库的 get()
函数是获取网页资源的常用工具,下面详细拆解它的用法和关联知识
一、get()
函数基础
(一)是什么 & 形式
get()
函数是 requests
库用来发起 HTTP GET 请求,从指定网页地址(URL)获取内容的核心方法 。它的基本使用形式是
requests.get(url, params=None, **kwargs)
url
:必填,要访问的网页网址(比如https://www.ptpress.com.cn/
),告诉get()
该去哪个网页 “拿内容”。params
:选填,是字典形式的参数,用来给 URL “附加查询信息” ,像搜索关键词、分页参数等,传了它,get()
会自动把参数拼到 URL 后面 。**kwargs
:选填,是一些可选的请求设置(比如设置请求头headers
、超时时间timeout
等 ),让请求更灵活。
(二)创建对象 & 简单用法
用 get()
函数时,它会返回一个 Response
对象 ,把这个对象存到变量里,就能进一步操作网页内容 。示例代码:
import requests
# 发起 GET 请求,获取网页内容,返回 Response 对象存到 r 里
r = requests.get('https://www.ptpress.com.cn/')
# 打印网页的文本内容(源代码)
print(r.text)
这里第 2 行,get()
函数访问指定 URL,服务器返回的内容被包装成 Response
对象,赋值给 r
;第 3 行通过 r.text
,就能拿到网页的文本形式内容(像 HTML 源代码 ),实现 “获取网页内容” 的基础需求。
(三)能做什么
简单说,get()
函数帮我们从网页服务器 “要数据” ,常见场景:
- 获取网页源代码:像上面例子,拿到网页的 HTML、CSS、JavaScript 等代码,用于分析网页结构、提取数据(比如标题、图片地址 )。
- 带参数搜索 / 查询:结合
params
参数,实现 “搜索功能” ,比如在网站搜关键词、分页获取内容(后面会讲params
用法 )。
二、get()
添加信息(params
参数用法 )
想给请求 “附加信息”(比如搜索关键词 ),就用 params
参数,步骤:
- 定义参数字典:把要传的信息,以
{键: 值}
的字典形式存好 。 - 传给
get()
的params
:发起请求时,把字典传给params
,get()
会自动拼接到 URL 后面
示例代码:
import requests
# 定义参数字典,key 是网站接收的参数名(比如 keyword ),value 是要搜索的内容(比如 Excel )
info = {'keyword': 'Excel'}
# params 传参,自动拼 URL(变成 https://www.ptpress.com.cn/search?keyword=Excel )
r = requests.get('https://www.ptpress.com.cn/search', params=info)
print(r.url) # 打印最终请求的 URL
print(r.text) # 打印网页内容
三、返回的 Response
对象属性
get()
函数返回的 Response
对象(比如上面的 r
),有很多实用属性,帮我们了解请求结果、处理内容:
(一)常用属性说明
status_code
(状态码 ):表示请求的 “结果状态” 。200
:请求成功,服务器正常返回内容 。301
:网页永久跳转,会跳到新地址 。404
:网页不存在,你访问的地址可能错了 。500
:服务器内部错误,网站自己出问题了 。
用r.status_code
可以拿到这个状态码,常用来判断请求是否成功,示例:
if r.status_code == 200:print('请求成功,内容:', r.text)
else:print('请求失败,状态码:', r.status_code)
headers
(响应头 ):服务器返回的 “附加信息” ,包含内容类型(Content-Type
)、编码、服务器类型等 。通过r.headers
查看,比如想知道网页编码,可能从headers
里的'Content-Type'
找线索 。url
(最终 URL ):实际请求的完整网址 。如果用了params
参数,这里会显示拼接后的 URL ,通过r.url
查看 。encoding
(编码 ):requests
库猜测的网页编码方式 。如果r.text
拿到的内容乱码,可能需要调整编码(后面讲apparent_encoding
)。cookies
(Cookies ):服务器返回的 Cookies 信息,是网站用来识别用户、保持会话的 。通过r.cookies
可以查看,有些网站需要带 Cookies 才能正常访问内容 。
四、设置编码(解决乱码问题 )
如果用 r.text
拿到的网页内容 “乱码”(像一堆看不懂的字符 ),大概率是编码识别错了 。requests
库提供了 apparent_encoding
,能更智能识别网页真实编码,设置方法:
import requests
r = requests.get('https://www.baidu.com/')
# 用 apparent_encoding 替换默认 encoding
r.encoding = r.apparent_encoding
print(r.text) # 再打印,内容就正常了
原理是 apparent_encoding
会分析网页内容,找出更准确的编码(比如 UTF-8、GBK 等 ),替换 r.encoding
后,r.text
就能正确解码网页内容,避免乱码 。
五、返回网页内容的方法
Response
对象里,拿网页内容常用两种方法:
(一)text
方法
- 作用:以字符串形式返回网页内容,适合获取 “文本类” 数据(HTML 源代码、文字信息等 )。
- 用法:
r.text
,前面例子里频繁用到,比如打印网页源代码 。
(二)content
方法
- 作用:以二进制字节流形式返回内容,适合获取 “非文本类” 数据(图片、音频、视频等 )。
- 用法:
r.content
,比如下载图片时,把二进制内容写入文件:
import requests
# 请求图片 URL
r = requests.get('https://cdn.ptpress.com.cn/xxx.jpg')
# 二进制写入,保存图片
with open('image.jpg', 'wb') as f: f.write(r.content)
总结一下,requests.get()
函数是发起 GET 请求、获取网页资源的 “入口” ,通过它拿到 Response
对象后,利用对象的属性(状态码、编码等 )和方法(text
、content
),就能灵活处理网页内容,不管是抓文字、下图片,还是带参数搜索,都能轻松实现~