用 urllib 开启爬虫之门:从零掌握网页数据抓取

在数字时代,数据就是力量。作为一名社会工作者,或许你想了解城市服务资源;作为一个编程初学者,你可能希望从网页中自动提取新闻、课程或公开数据。今天,我们就来讲一讲 Python 标准库中的一把“钥匙”——urllib 库,它能帮你打开网页数据的大门。


一、什么是 urllib?

urllib 是 Python 内置的标准库,不需要额外安装。它可以帮助我们完成如下工作:

  • 发送 HTTP 请求(如 GET、POST)

  • 解析网页 URL

  • 模拟浏览器访问网站

  • 提交表单数据

  • 下载网页或文件

相当于一套爬虫工具箱,轻量、易学、直接,适合入门者使用。


二、urllib 的模块组成

urllib 实际上是一个“包”,里面有几个子模块,各司其职:

子模块

作用说明

urllib.request

用于发送请求、获取网页内容

urllib.parse

用于解析和拼接 URL 地址

urllib.error

用于处理异常和错误

urllib.robotparser

用于读取 robots.txt(爬虫协议)文件

三、实战操作:一步步抓取网页内容

1. 请求一个网页并读取内容

from urllib import requesturl = "https://example.com"response = request.urlopen(url)html = response.read().decode("utf-8")  # 解码成字符串print(html)


✅ 说明:

  • urlopen() 会像浏览器一样访问网页

  • read() 获取的是字节数据,要用 .decode() 转换成字符串

  • 默认是 GET 请求


2. 添加浏览器头部(模拟正常访问)

有的网站会检测是不是“爬虫”,我们可以加一个 User-Agent 来模拟浏览器:

from urllib import requesturl = "https://example.com"headers = {"User-Agent": "Mozilla/5.0"}req = request.Request(url, headers=headers)response = request.urlopen(req)print(response.read().decode("utf-8"))



3. POST 请求(提交表单数据)

from urllib import request, parseurl = "https://httpbin.org/post"data = {"username": "test","password": "123456"}data = parse.urlencode(data).encode("utf-8")  # 编码成 bytesreq = request.Request(url, data=data)req.add_header("User-Agent", "Mozilla/5.0")response = request.urlopen(req)


print(response.read().decode("utf-8"))


4. 下载一个文件(如图片或PDF)

from urllib import request

img_url = "https://www.example.com/image.jpg"
request.urlretrieve(img_url, "downloaded.jpg")

print("下载完成!")


5. 解析 URL 和参数

from urllib import parse

url = "https://example.com/search?q=python&sort=desc"
result = parse.urlparse(url)

print(result.scheme)   # https
print(result.netloc)   # example.com
print(result.path)     # /search
print(result.query)    # q=python&sort=desc


四、应对爬虫限制

虽然 urllib 简单易用,但功能相对基础。许多网站会设置反爬机制,例如:

  • 验证 User-Agent

  • 限速(频繁请求会被封)

  • 需要登录才能访问

对于这些高级功能,可以搭配使用 time.sleep()(加延迟),或者使用更强大的库如 requestsselenium 等。


五、结语:数据不难,只要你敢动手

urllib 是 Python 网络爬虫的入门首选。它虽然不像 requests 那样灵活优雅,但胜在“标准、轻量、易懂”。对刚接触爬虫的社会工作者、老师、学生来说,完全够用。你只需掌握基本结构,便能自主从网页中抓取你需要的资源数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89719.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 订单超时自动取消的 3 种主流实现方案

Spring Boot 订单超时自动取消的 3 种主流实现方案关键词:Spring Boot、订单超时、延迟任务、RabbitMQ、Redis、定时任务在电商、外卖、票务等业务中,“下单后若 30 分钟未支付则自动取消”是一道经典需求。实现方式既要保证 实时性,又要在 高…

0401聚类-机器学习-人工智能

文章目录一 无监督学习什么是无监督学习?核心特点:无监督学习的主要类型1. 聚类分析 (Clustering)2. 降维 (Dimensionality Reduction)3. 关联规则学习 (Association Rule Learning)4. 异常检测 (Anomaly Detection)5. 密度估计 (Density Estimation)二 …

基础神经网络模型搭建

nn 包提供通用深度学习网络的模块集合,接收输入张量,计算输出张量,并保存权重。通常使用两种途径搭建 PyTorch 中的模型:nn.Sequential和 nn.Module。 nn.Sequential通过线性层有序组合搭建模型;nn.Module通过__init__…

基于单片机出租车计价器设计

传送门 👉👉👉👉其他作品题目速选一览表 👉👉👉👉其他作品题目功能速览 概述 本设计实现了一种基于单片机的智能化出租车计价系统。系统以单片机为核心处理器,集成…

134. Java 泛型 - 上限通配符

文章目录134. Java 泛型 - 上限通配符 (? extends T)**1. 什么是上限通配符 (? extends T)?****2. 为什么使用 ? extends T?****3. 示例:使用 ? extends T 进行数据读取****✅ 示例 1:计算数值列表的总和****4. 注意事项&…

【1】YOLOv13 AI大模型-可视化图形用户(GUI)界面系统开发

【文章内容适用于任意目标检测任务】【GUI界面系统不局限于YOLOV13,主流YOLO系列模型同样适用】本文以车辆行人检测为背景,介绍基于【YOLOV13模型】和【AI大模型】的图形用户(GUI)界面系统的开发。助力大论文实现目标检测模型的应…

小程序常用api

1. wx.request - 发起网络请求 用于向服务器发送 HTTP 请求,获取数据或提交表单。 // 示例:GET 请求获取数据 wx.request({url: https://api.example.com/data, // 替换为实际 API 地址method: GET,success: (res) > {console.log(请求成功, res.da…

PaliGemma 2-轻量级开放式视觉语言模型

PaliGemma 2是轻量级开放式视觉语言模型 (VLM),灵感源自 PaLI-3,基于 SigLIP 视觉模型和 Gemma 语言模型等开放式组件。PaliGemma 同时接受图片和文本作为输入,并且可以回答有关图片的详细问题和背景信息。PaliGemma 2 提供 30 亿、100 亿和 …

腾讯云云服务器深度介绍

以下是围绕腾讯云云服务器(CVM)的详细介绍与推荐文章,结合其核心优势、应用场景及技术特性,为不同用户群体提供参考: 🚀 一、产品定位与核心价值 腾讯云云服务器(Cloud Virtual Machine, CVM&a…

Ceph OSD.419 故障分析

Ceph OSD.419 故障分析 1. 问题描述 在 Ceph 存储集群中,OSD.419 无法正常启动,系统日志显示服务反复重启失败。 2. 初始状态分析 观察到 OSD.419 服务启动失败的系统状态: systemctl status ceph-osd419 ● ceph-osd419.service - Ceph obje…

MySQL持久化原理及其常见问题

目录 MySQL刷盘原理 脏页和干净页 MySQL出现短暂的堵塞SQL现象 情况分析 应对措施 数据库表中数据删除原理 删除表中数据数据库空间大小不会改变 情况分析 应对措施 MySQL刷盘原理 一般主要分为两个步骤 内存更新和 redo log 记录是同一事务修改的两个必要操作&#…

VSCode中Cline无法正确读取终端的问题解决

出现的问题是:Cline 无法正确读取终端输出。 Shell Integration Unavailable Cline won’t be able to view the command’s output. Please update VSCode (CMD/CTRL Shift P → “Update”) and make sure you’re using a supported shell: zsh, bash, fish, o…

scalelsd 笔记 线段识别 本地部署 模型架构

ant-research/scalelsd | DeepWiki https://arxiv.org/html/2506.09369?_immersive_translate_auto_translate1 https://gitee.com/njsgcs/scalelsd https://github.com/ant-research/scalelsd https://huggingface.co/cherubicxn/scalelsd 模型链接: https…

Python, C ++开发个体户/个人品牌打造APP

个体户/个人品牌打造APP开发方案(Python C)一、技术选型与分工1. Python- 核心场景:后端API开发、数据处理、内容管理、第三方服务集成(如社交媒体分享、支付接口)。- 优势:开发效率高,丰富的库…

SQLAlchemy 常见问题笔记

文章目录SQLAlchemy Session对象如何操作数据库SQLAlchemy非序列化对象如何返回1.问题分析2.解决方案方法1:使用 Pydantic 响应模型(推荐)方法2:手动转换为字典(简单快速)方法3:使用 SQLAlchemy…

Shell脚本-uniq工具

一、前言在 Linux/Unix 系统中,uniq 是一个非常实用的文本处理命令,用于对重复的行进行统计、去重和筛选。它通常与 sort 搭配使用,以实现高效的文本数据清洗与统计分析。无论是做日志分析、访问频率统计,还是编写自动化脚本&…

氛围编码(Vice Coding)的工具选择方式

一、前言 在写作过程中,我受益于若干优秀的博客分享,它们给予我宝贵的启发: 《5分钟选对AI编辑器,每天节省2小时开发时间让你早下班!》:https://mp.weixin.qq.com/s/f0Zm3uPTcNz30oxKwf1OQQ 二、AI编辑的…

[硬件电路-57]:根据电子元器件的受控程度,可以把电子元器件分为:不受控、半受控、完全受控三种大类

根据电子元器件的受控程度,可将其分为不受控、半受控、完全受控三大类。这种分类基于元器件的工作状态是否需要外部信号(如电压、电流、光、热等)的主动调控,以及调控的精确性和灵活性。以下是具体分类及实例说明:一、…

基于Pytorch的人脸识别程序

人脸识别原理详解人脸识别是模式识别和计算机视觉领域的重要研究方向,其目标是从图像或视频中识别出特定个体的身份。现代人脸识别技术主要基于深度学习方法,特别是卷积神经网络 (CNN),下面从多个维度详细解析其原理:1. 人脸识别的…

ubuntu 开启ssh踩坑之旅

文章目录确认当前用户为普通用户 or root命令使用ssh还是sshd服务名称的由来apt update和apt upgrade的关系apt upgrade报错:“E: 您在 /var/cache/apt/archives/ 上没有足够的可用空间”开启ssh步骤错误排查查看日志修改sshd_config文件允许防火墙通过22端口确认当…