当前位置: 首页 > news >正文

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 参数,步骤:

  1. 定义参数字典:把要传的信息,以 {键: 值} 的字典形式存好 。
  2. 传给 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 对象后,利用对象的属性(状态码、编码等 )和方法(textcontent ),就能灵活处理网页内容,不管是抓文字、下图片,还是带参数搜索,都能轻松实现~ 

 

http://www.lryc.cn/news/590840.html

相关文章:

  • 智能体开发工具链全景图:IDE、调试器与监控平台
  • Fair-code介绍(Fair code)(一套新型软件模型:旨在“开源”“商业可持续性”中找到平衡)
  • Windows 11清理C盘方法大全:磁盘清理/禁用休眠/系统还原点/优化大师使用教程
  • Android默认背光亮度配置说明
  • 纯前端html实现图片坐标与尺寸(XY坐标及宽高)获取
  • SegNet:一种用于图像分割的深度卷积编码器解码器架构
  • RocketMQ 高可用集群架构与一致性机制解析
  • 【3D目标检测】Livox Tele-15采集的.lvx数据转.bag再转.pcd
  • 鲍威尔去留风波的AI量化解析:基于多模态数据驱动的金融市场脉冲响应研究
  • 达梦数据守护集群搭建(1主1实时备库1同步备库1异步备库)
  • 时序数据库选型指南 —— 为什么选择 Apache IoTDB?
  • javaweb学习开发代码_HTML-CSS-JS
  • Java面试(基础篇) - 第二篇!
  • slot=“trigger“ 覆盖了组件内部的 ref=“trigger“【详细来龙去脉版 5min】
  • Web开发 01
  • Python的“__name__“属性
  • visual freebasic教程-菜单栏
  • 视频码率是什么?视频流分辨率 2688x1520_25fps采用 h264格式压缩,其码率为
  • 线上协同办公时代:以开源AI大模型等工具培养网感,拥抱职业变革
  • Vim多列打开不同文件操作指南
  • Dijkstra 算法求解多种操作
  • 【真·CPU训模型!】单颗i7家用本,4天0成本跑通中文小模型训练!Xiaothink-T6-mini-Preview 技术预览版开源发布!
  • 腾讯云服务上下载docker以及使用Rabbitmq的流程
  • 闭包的两种设计模式
  • 【Android】ViewBinding(视图绑定)
  • OpenCV中常用特征提取算法(SURF、ORB、SIFT和AKAZE)用法示例(C++和Python)
  • YOLOv3 技术深度解析:从理论到实践的完整指南
  • Linux的Ext系列文件系统
  • 深入理解进程等待:wait的简化与waitpid的灵活性
  • 力扣每日一题--2025.7.17