news 2026/9/11 22:20:27

用Python Requests爬数据?14个案例从入门到实战,新手也能看懂

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python Requests爬数据?14个案例从入门到实战,新手也能看懂

要去爬取网页的数据, 还要调用 API 的接口, 对此能够堪称“神器”的库是存在的。其特点是一行代码就能够发起请求, 新手也能够快速上手。在今天整理出了 14 个实操案例, 这些案例覆盖了从基础到实战的全方面内容, 代码是直接复制就可以使用的, 所以要赶紧将其收藏起来!

1. 先装库:30秒搞定安装

使用之前, 要先保证它在你的电脑当中居住安顿下来。开启调出命令行的视窗界面, 把下面这一排排的代码进行复制, 按下回车键就可以了:

pip

(提示: 假若是提示“pip不是之内命令”的情形下, 要牢记要率先去核查是不是已添加进到环境变量之中哦~)

2. 最基础的GET请求:像浏览器一样“访问网页”

比如想看看的API长啥样,用GET请求一调就知道:

# 发送请求(相当于在浏览器输入网址)

= .get(';)

# 查看“访问结果”:状态码200=成功(就像电话打通了)

# 看内容:文本格式或JSON格式(API接口常用)

print("文本内容:")

print(.text) # 适合看网页源码

print("JSON数据:")

打印那点 JSON 括号内的内容, 这个操作适宜于剖析接口传送回来的结构规整的数据。

对于新手而言必须要看, 这可是构成所有操作的根基所在, 要记好, 只要是.get(网址)这种形式就能够去发送请求啦~

3. 带参数的GET请求:比如搜“仓库”

想在上搜相关的仓库?用传参数,就像在网页上填搜索框:

# 定义参数:q=搜索关键词,page=页码,=每页数量

= {

“q”之处为空字符串, 用于搜索空字符串。

'page': 1, # 第1页

'': 10 # 每页10条

# 发请求时带上参数(不用手动拼网址,超方便!)

= .get(';, =)

# 解析结果:看看有多少仓库,名字叫啥

data = .json()

print(f"找到{data

''

}个仓库")

for repo in data

'items'

print(repo

'name'

, repo

''

) # 输出仓库名和链接

具备实用性的场景为, 去实施爬取那种带有搜索条件的页面, 像豆瓣电影、做电商商品搜索时所涉及的状况, 均能够运用这一方法~

4. POST请求:提交表单数据(比如模拟登录)

在登录网站之际, 以及提交表单之时, 常常会运用POST请求。举例来说, 针对某一试用接口去发表单数据:

# 表单数据:就像在网页上填用户名和密码

data = {

'': '',

'': ''

# 发POST请求(把数据“递”给服务器)

= .post(';, data=data)

# 看看服务器收到了啥(测试接口会原封不动返回数据)

print(.json())

关键的区别在于, GET所代表的含义是“拿数据”, 而POST所代表的含义则是“发数据”, 此外, 登录以及注册这些行为基本上都采用POST~

5. POST发JSON数据:给接口传结构化信息

若接口规定要以JSON这种格式去传递数据, 现今好多API皆是如此一番状况, 那么直接采用json参数会显得更为便利:

# JSON数据:比如用户信息

= {

'name': '张三',

'age': 25,

'city': '上海'

# 直接传json参数,不用手动转格式

= .post(';, json=)

# 服务器返回的内容里,就能看到我们发的JSON

print(.json())

一小点诀窍, 采用json=要比data=json.dumps()更为简便, 能够少写一行代码呦~

6. 设置请求头:假装自己是“浏览器”

有些网站, 会对”程序“所发出的请求予以拒绝, 在这样的时候, 添加一个请求头, 以此告知服务器, ”我是浏览器“。

= {

进行假装, 使其成为浏览器, 任意搜寻一个User-Agent填入其中就可以了。

‘User - Agent’, 为‘/5.0 ( NT 10.0; Win64; x64) /91.0.4472.124’。

要是存在登录需求, 在此处能够放置令牌, 比如说那种形式如“: 你的令牌”这般的东西。

# 带着头信息发请求

= .get(';, =)

如果你在进行这样的操作时 出现了200 那就意味着成功 要是出现403 那就有可能是被拒绝了, 考虑换个User-Agent再试试 此时打印输出的是点 这一情况。

避坑点:爬网页时遇到403错误,先检查是不是没加请求头~

7. 处理超时:别让程序“卡”死

倘若网站有半天未能呈现反应, 程序届时会始终处于等待状态么? 添加一个超时所需的时间, 一旦超过此时间便予以“放弃”:

try:

# 设置3秒超时:3秒内没反应就报错

= .get(';, =3)

print(.)

..:

print("超时啦!这个网站太慢了~")

as e:

print(f"其他错误:{e}")

必加参数:写爬虫一定要加,不然程序可能无限等待~

8. 下载图片/文件:把网上的资源存到本地

看到好看的图片想下载?用轻松搞定,还能断点续传:

# 比如下载的logo

url = ';

# 用=True:边下载边存,适合大文件

= .get(url, =True)

if . == 200:

开启文件, 运用二进制进行写入操作, 其中图片、视频均采用'wb'。

以二进制可写模式, 即使用 'wb', 打开名为 '-logo.png' 的文件, 将其作为文件对象 f 来处理。

# 每次读1024字节(1KB),一点一点存

for chunk in .(1024):

f.write(chunk)

print("下载完成!图片在当前文件夹里~")

else:

print("下载失败,可能链接错了")

扩展:把url换成视频、文档链接,就能下载其他文件~

9. 用保持登录状态:模拟“登录后操作”

会存在这样一些网站, 其内容需登录之后方可查看, 像个人中心组的某些内容便是如此, 并且该网站具备能够记住登录状态的功能。

# 创建一个对象(相当于一个浏览器窗口,会记住)

= .()

# 第一步:登录(比如用POST提交账号密码)

你的内容似乎是一段代码相关且不是规范的中文表述, 确实不好按照要求进行有意义的改写, 可以提供更合适的中文句子让我来进行改写操作。

.post(';, data=) # 模拟登录

# 第二步:访问需要登录的页面(会自动带登录信息)

= .get(';)

print("当前的:")

打印(点JSON括号), 能看到登录之后的, 表明保持状态达成成功。

场景:爬需要登录的网站(比如论坛、个人博客)必须用~

10. 处理重定向:跟着网站“跳”

访问某些网址时, 其会发生自动跳转至另外一个页面的情况, 举例说明, 像是htpp跳转至https这种情况, 并且默认状态下是会跟随进行跳转的。

# 这个网址会自动跳1次

= .get(';)

打印, (输出)“最终状态码: ”。, (停顿)# 200(此为跳完之后所得到的结果)。

打印(“跳转历史: ”, .), # 此操作能够看见是从哪一个网址跳转而来的。

# 如果不想让它跳:=False

= .get(';, =False)

打印("不跳转的状态码: "), # 302(表明要跳转)。

小知识:状态码301=永久跳转,302=临时跳转~

11. 处理认证:访问需要账号密码的接口

有些API, 其访问需要输入账号密码才行, 像公司内部那些接口就是如此, 通过auth参数来将此问题解决:

# 比如这个测试接口,账号user,密码

url = ';

# 直接传(账号, 密码)就行,不用手动处理加密

等价于.get(, url, 的认证为用户名是'user', 密码为空)(。)。

打印(点), # 二百等于认证成功, 四百零一等于账号密码错了。

print(.json()) # 成功的话会返回信息

12. 异常处理:让程序更“抗造”

写代码时难免出错,用try-捕获错误,程序不会直接崩溃:

from . , ,

try:

= .get('

;) # 这个接口会返回404

.() # 主动抛出错误:4xx/5xx状态码会报错

as e:

print(f"网页发生错误: {e}(举例来说, 404意味着页面不存在, 500表示服务器崩溃了)".)。

:

print("连不上网站,可能网址错了或没网~")

:

print("超时了,网站没反应~")

as e:

print(f"其他意外:{e}")

else:

# 没出错的话,就处理数据

print("请求成功!内容:", .text)

好习惯, 正式写代码时, 必须加上对异常情况的应对处理,否则只因一点微小的错误, 就会导致之前所做的全部努力白费, 化为乌有~

13. 使用代理:换个“身份”访问

有些网站, 会对频繁访问加以限制, 借助代理, 能够更换一个IP, 进而继续进行爬取操作, 请注意要合法使用呀:

# 代理地址(这里是示例,实际需要找可用的代理)

= {

那里出现指代的“http”, 其对应的内容是“http://代理IP:端口”。

“https”, 其对应的是“http://代理给出之IP:按照规定划分的位置数量”。

try:

# 用代理访问,看看对外显示的IP

= .get(';, =)

print("当前显示的IP:", .json())

..:

print("代理用不了,换一个试试~")

提示一下, 免费的代理存在不稳定的境况, 对于重要的场景而言, 推荐使用付费后的代理, 并且要遵循网站所制定的规则哦~

14. 实战:查天气!调用公开API

直至末尾呈现一个具备实用性的: 借由天气应用程序编程接口选取任意地域的气象温度, 将代码予以修改便能够查询你所处居所的天气状况~

def (city, ):

# 天气API的地址(这里用的是,需要自己注册拿)

= ""

= {

‘q’: 城市, # 城市的名称, 像是“北京”“”中的那种城市名。

'appid': , # 换成你自己的

“单位”: “”, 温度的单位, 其中摄氏度, 默认情况下是开尔文。

try:

= .get(, =)

.() # 检查是否出错

= .json()

# 提取有用的信息

print(f"\n{city}的天气:")

print(f"温度:{

'main'

'temp'

}°C")

print(f"状况:{

''

''

}(比如晴、多云)")

print(f"湿度:{

'main'

''

}%")

print(f"风速:{

'wind'

'speed'

}米/秒")

as e:

打印(格式化输出("查不了: {e}(可能错了, 或城市名不对)"))。

# 用法:换成你自己的(去官网注册免费获取)

= '你的'

('北京', ) # 查北京的天气

以双引号为空, 括号内为空的形式, 查询名叫广州的城市, 其天气状况, 英文表达也可以的做法来进行。

动手试试:注册API时记得选免费套餐,足够个人用了~

那些案例所覆盖的, 是百分之九十的常用场景, 新手能够从“基础GET”开始练起, 接着练“带参数请求”,随后逐步尝试实战案例。要记住: 去爬取数据的时候, 务必要遵循网站的.txt规则, 千万别进行频繁请求, (添加一个时间间隔time.sleep(1)), 一定要合法合规, 这是最为重要的~

#基础##每天学#​#打卡#​#从今天起记录我的202#​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 22:19:56

从 TaskRegistry 到大厂架构:Python 高并发流式任务调度实战

如何在一个 Python Web 服务中,优雅地管理成千上万个流式任务,并实现精准的取消、断点恢复与分布式扩展。一、一个真实的业务场景 假设你在开发一个 AI 深度研报系统:用户提交一个复杂的研究课题(如“分析2026年全球大模型开源生态…

作者头像 李华
网站建设 2026/9/11 22:19:25

Python在工业自动化领域的应用详解 , python和硬件结合可以做什么

围绕本篇文章, 来给大家说一说, 在工业自动化范畴里的应用详尽解析, 以及,跟硬件相互结合能够达成些什么样的事情, 所对应的重点知识领悟, 期望对各位能产生有益的协助, 可千万别忘记收藏下本网站呢。这是服务于不一样的应用场景的情况。三者具有相同之点, 即是都属…

作者头像 李华
网站建设 2026/9/11 22:19:22

后端技术栈演进:我亲手拆过的七个“过度设计”

做了这么多年后端开发,我拆过的“过度设计”比写过的业务代码还多。每一次拆除,都是一次认知升级。以下是我亲手拆过的七个典型“过度设计”,每一个都曾让我夜不能寐。一、为“微服务”而微服务三个人的团队,把项目拆成六个微服务…

作者头像 李华
网站建设 2026/9/11 22:19:12

STM32L151RCT6:低功耗、真EEPROM与USB兼备的成熟MCU选型

STM32L151RCT6这颗料,是我这几年在表计项目和手持设备方案里反复摸过的一颗芯片。前两天还有人在群里问“这芯片是不是该淘汰了”,我当时愣了一下——论性能它确实不算强,论功耗它也不是ST家族里最漂亮的,但你把低功耗、模拟外设、…

作者头像 李华
网站建设 2026/9/11 22:19:01

JY-KMT-LORA微型模块实测:低功耗远距离无线数传与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 22:18:20

MySQL深分页优化实战:从原理分析到游标分页改造

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华