跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python Requests 库入门与实践:获取网络资源基础

综述由AI生成使用 Python Requests 库进行网络数据获取的基础知识。内容包括发送 HTTP 请求、处理响应状态码与文本内容、下载二进制文件如图片。通过正则表达式演示了从 HTML 中提取标题和链接的方法,并以豆瓣电影 Top250 为例展示了分页爬取、User-Agent 模拟及 IP 代理的使用。最后总结了爬虫开发的注意事项,包括频率控制、异常处理及遵守 robots.txt 协议,并预告后续将介绍 BeautifulSoup 等解析工具。

灵魂摆渡发布于 2026/3/25更新于 2026/6/127 浏览
Python Requests 库入门与实践:获取网络资源基础

用 Python 获取网络资源(一):Requests 库入门与实践

学习概述

在网络数据采集领域,Python 有着得天独厚的优势,这得益于其丰富的第三方库生态。其中,requests 库是最简单、最人性化的 HTTP 客户端库之一,它让发送 HTTP 请求变得像访问本地文件一样简单。

通过本篇的学习,你将掌握:

  • 使用 Requests 库发送 HTTP 请求
  • 处理服务器响应,获取文本和二进制内容
  • 设置请求头,模拟浏览器访问
  • 使用正则表达式初步提取网页信息
  • 了解 IP 代理的基本使用场景

用 Python 获取网络数据

为什么选择 Requests 库?
  • 简单易用:API 设计直观,学习成本低
  • 功能全面:支持 GET、POST 等各种 HTTP 方法,自动处理编码、Cookie 等
  • 社区活跃:文档完善,遇到问题容易找到解决方案
初识 Requests:获取网页 HTML

下面是一个最简单的例子,演示如何使用 requests 获取搜狐首页的 HTML 代码:

import requests

# 发送 GET 请求
resp = requests.get('https://www.sohu.com/')

# 检查响应状态码(200 表示成功)
if resp.status_code == 200:
    # 打印网页 HTML 源代码
    print(resp.text[:1000])
else:
    print(f'请求失败,状态码:{resp.status_code}')

代码解析:requests.get() 发送 GET 请求,返回一个 Response 对象;resp.status_code 获取 HTTP 状态码;resp.text 获取响应内容的文本形式(自动解码)。

从 HTML 中提取信息:正则表达式初试

获取 HTML 只是第一步,我们通常需要从中提取特定信息。正则表达式是文本匹配的利器,下面示例从搜狐首页提取新闻标题和链接:

import re
import requests

# 匹配<a>标签中带有 title 属性的链接
pattern = re.compile(r'<a.*?href="(.*?)".*?title="(.*?)".*?>')

resp = requests.get('https://www.sohu.com/')

if resp.status_code == 200:
    all_matches = pattern.findall(resp.text)
    for href, title in all_matches[:5]:
        # 只显示前 5 个结果
        print(f'标题:{title}')
        print(f'链接:{href}')
        print('-' * 50)

注意:实际项目中,正则表达式可能因网页结构变化而失效。更稳定的解析方式(如 BeautifulSoup)将在后续文章介绍。

获取二进制资源:下载图片

Requests 不仅可以获取文本,还能下载图片、视频等二进制文件:

import requests

# 百度 Logo 的 URL
logo_url = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'

resp = requests.get(logo_url)

if resp.status_code == 200:
    # 将二进制内容写入文件
    with open('baidu_logo.png', 'wb') as f:
        f.write(resp.content)
    print('图片下载完成!')
else:
    print('下载失败')

提示:resp.content 返回的是二进制数据,而 resp.text 返回的是解码后的文本。

实战项目:爬取豆瓣电影 Top250

让我们用一个完整的实战项目巩固所学——爬取豆瓣电影 Top250 榜单。

1. 分析目标网站
  • 访问 https://movie.douban.com/top250
  • 每页显示 25 部电影,共 10 页
  • 翻页 URL 规律:https://movie.douban.com/top250?start=0(第一页),`start=25`(第二页),依此类推
2. 编写爬虫代码
import random
import re
import time
import requests

for page in range(1, 11):
    # 循环 10 页
    # 计算当前页的 start 值
    start = (page - 1) * 25
    
    # 发送请求,设置 User-Agent 模拟浏览器
    resp = requests.get(
        url=f'https://movie.douban.com/top250?start={start}',
        headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
    )
    
    if resp.status_code != 200:
        print(f'第{page}页请求失败')
        continue
    
    # 提取电影标题(中文标题)
    title_pattern = re.compile(r'<span>([^&]*?)</span>')
    titles = title_pattern.findall(resp.text)
    
    # 提取评分
    rating_pattern = re.compile(r'<span.*?>(.*?)</span>')
    ratings = rating_pattern.findall(resp.text)
    
    print(f'\n========== 第{page}页 ==========')
    for i, (title, rating) in enumerate(zip(titles, ratings), 1):
        print(f'{i:2d}. {title:30} 评分:{rating}')
    
    # 随机延迟,避免请求过于频繁
    delay = random.uniform(1, 3)
    time.sleep(delay)

print('\n数据抓取完成!')

关键点说明:User-Agent 设置:模拟浏览器访问,绕过基础反爬;正则表达式匹配:通过分析 HTML 结构定位目标数据;延迟机制:添加随机延迟,尊重目标网站,避免被封 IP。

3. 应对反爬:使用 IP 代理

当频繁访问同一网站时,你的 IP 可能会被限制。这时可以使用代理服务隐藏真实 IP。以下以示例代理配置为例:

import requests
import re

# 代理配置(需要替换为自己的 AppKey)
APP_KEY = '你的 AppKey'
PROXY_HOST = 'proxy.example.com:9001'

for page in range(1, 4):
    # 只测试前 3 页
    resp = requests.get(
        url=f'https://movie.douban.com/top250?start={(page - 1)*25}',
        headers={
            'Proxy-Authorization': f'Basic {APP_KEY}',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        },
        proxies={
            'http': f'http://{PROXY_HOST}',
            'https': f'https://{PROXY_HOST}'
        },
        verify=False  # 跳过 SSL 证书验证(仅用于测试)
    )
    
    if resp.status_code == 200:
        # 提取逻辑同上
        titles = re.findall(r'<span>([^&]*?)</span>', resp.text)
        print(f'第{page}页获取到{len(titles)}部电影')
    else:
        print(f'第{page}页请求失败:{resp.status_code}')
    time.sleep(1)
爬虫开发注意事项
  1. 频率控制:合理设置请求间隔,避免对目标服务器造成压力
  2. 异常处理:网络请求可能失败,添加重试机制
  3. 遵守协议:查看目标网站的 robots.txt,尊重爬取规则
  4. 数据存储:及时保存已获取数据,避免重复工作
拓展学习:Requests 库更多功能

Requests 库还有很多高级功能值得探索:

  • 会话保持:使用 Session 对象维持 Cookie
  • 文件上传:模拟表单文件上传
  • SSL 证书验证:处理 HTTPS 请求
  • 超时设置:防止请求无限等待
  • 身份认证:支持 Basic Auth、OAuth 等
总结与预告

今天,我们学会了使用 Requests 库发送 HTTP 请求并获取响应内容,这是网络爬虫最基础也是最核心的一步。同时,我们用正则表达式进行了初步的数据提取,完成了豆瓣电影 Top250 的爬取实战。

然而,正则表达式编写和维护成本较高,特别是面对复杂的 HTML 结构时。下一篇文章,我们将介绍两种更优雅的 HTML 解析工具:BeautifulSoup 和 lxml,它们能让我们用更直观的方式提取网页数据。

动手练习

  1. 基础任务:使用 Requests 下载一张你喜欢的图片,并保存到本地。
  2. 进阶任务:修改豆瓣电影爬虫,同时提取电影的导演、主演和上映年份信息。
  3. 挑战任务:尝试爬取知乎热榜,提取问题标题和热度值。

提示:知乎反爬较严,需要仔细设置请求头,并考虑使用 IP 代理。

目录

  1. 用 Python 获取网络资源(一):Requests 库入门与实践
  2. 学习概述
  3. 用 Python 获取网络数据
  4. 为什么选择 Requests 库?
  5. 初识 Requests:获取网页 HTML
  6. 发送 GET 请求
  7. 检查响应状态码(200 表示成功)
  8. 从 HTML 中提取信息:正则表达式初试
  9. 匹配<a>标签中带有 title 属性的链接
  10. 获取二进制资源:下载图片
  11. 百度 Logo 的 URL
  12. 实战项目:爬取豆瓣电影 Top250
  13. 1. 分析目标网站
  14. 2. 编写爬虫代码
  15. 3. 应对反爬:使用 IP 代理
  16. 代理配置(需要替换为自己的 AppKey)
  17. 爬虫开发注意事项
  18. 拓展学习:Requests 库更多功能
  19. 总结与预告
  20. 动手练习
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 SpringBoot 和 PostGIS 的各省东西南北四至极点区县可视化
  • MySQL 9.1.0 Windows 安装配置详细教程
  • Git 下载、安装与配置教程
  • Java WebSocket 实现 AI 智能客服系统的实战与优化
  • 即梦 AI 基础操作指南:从绘图到视频生成
  • .NET 集成 GoView 低代码可视化大屏实战指南
  • OpenCode 实战:用终端打造项目级 AI 工程师
  • Superpowers 编码 Agent 技能框架使用与原理分析
  • OpenClaw 汉化版部署常见问题排查指南
  • 二叉树前中后序遍历详解:递归与迭代实现
  • 使用 Vue.js 构建 Java 桌面应用
  • Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
  • MySQL 8.0 Windows 安装配置实战指南
  • Python 爬虫实战:抓取网易云音乐热歌榜
  • Java 并发编程核心体系:从 JMM 原理到生产实战
  • whisperX 入门指南:从安装到实现语音识别功能
  • Java 零基础入门指南:环境配置与核心语法
  • LLM 模型为何在简单数值比较上犯错?13.11 与 13.8 争议解析
  • PicoClaw 轻量级 AI 助手安装与使用指南
  • DataX Web 分布式数据同步工具部署指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online