curl/wget一行命令搞定简单爬虫任务

curl/wget一行命令搞定简单爬虫任务

很多人提起爬虫第一反应就是写 Python 脚本、安装第三方依赖库,但对于大量轻量抓取需求,系统自带的curlwget两款命令行工具就足够使用。它们无需搭建开发环境、一行命令即可完成任务、资源占用极低,是快速抓取数据、批量下载资源的利器。本文整理了日常高频的爬虫场景,全部可通过单行命令实现,覆盖从单页抓取到整站下载的常见需求。

一、核心参数速览:先搞懂最常用的开关

在进入实战前,先梳理两款工具的核心高频参数,理解后就能灵活组合出适合自己的抓取命令。

curl 常用核心参数

  • -O:将远程文件保存到本地,文件名沿用远程文件名
  • -o 文件名:自定义保存的本地文件名
  • -s:静默模式,不输出进度条和冗余日志
  • -A "UA字符串":设置 User-Agent,模拟浏览器身份
  • -e "Referer地址":设置请求的 Referer 来源页
  • -b "cookie内容":直接携带 Cookie 发起请求
  • -X POST:指定请求方法为 POST
  • -d "参数内容":POST 请求提交的表单 / 数据体
  • -x 代理地址:端口:使用 HTTP 代理发起请求
  • -L:自动跟随 301/302 重定向跳转

wget 常用核心参数

  • -O 文件名:自定义保存的本地文件名
  • -c:断点续传,下载中断后从已完成位置继续
  • -r:开启递归下载,顺着页面链接向下抓取
  • -l 层数:设置递归的深度层级,避免无限爬取
  • --limit-rate=速度:限制下载速度,避免打满带宽触发风控
  • -U "UA字符串":设置 User-Agent
  • --referer=地址:设置请求 Referer
  • --load-cookies=文件路径:从本地文件加载 Cookie
  • -np:不追溯到父目录,仅下载目标路径下的内容
  • -k:将下载页面内的链接转换为本地相对路径,适配离线浏览

二、高频场景实战:一行命令完成爬虫任务

场景 1:抓取单个网页 / 文件保存到本地

最基础的抓取需求,抓取单页或单个文件存储到本地。

bash

运行

# curl 抓取页面并保存为index.html,自动跟随重定向 curl -L -o index.html https://example.com # wget 直接下载文件,默认沿用远程文件名 wget https://example.com/file.zip

curl 默认不会自动跟随重定向,必须加上-L参数才能正常打开跳转链接;wget 默认自动跟随重定向,无需额外参数。

场景 2:批量下载序列文件

当资源按数字序号命名(如分页图片、分卷文档)时,利用内置序列扩展,无需写循环即可批量抓取。

bash

运行

# curl 批量下载img_1.jpg 到 img_100.jpg curl -L -O https://example.com/images/img_[1-100].jpg # wget 批量下载第1到第20页的PDF文档 wget https://example.com/docs/report_{1..20}.pdf

curl 使用[起始-结束]格式实现序列匹配,wget 则复用 Bash 原生的{起始..结束}序列扩展,两者都支持自定义步长。

场景 3:提取页面内所有链接

配合管道文本工具,一行即可提取页面中所有链接,适合快速收集目标地址列表。

bash

运行

# curl 抓取页面并提取所有http/https开头的外链 curl -s https://example.com | grep -oE 'href="https?://[^"]+"' | sed 's/href="//;s/"//' # wget 抓取页面并提取所有图片资源地址 wget -q -O - https://example.com | grep -oE 'src="[^"]+\.(jpg|png|webp)"' | sed 's/src="//;s/"//'

-s/-q开启静默模式屏蔽冗余输出,通过 grep 正则匹配目标内容,再用 sed 去除 HTML 标签属性,最终输出纯文本链接,可直接重定向到文件保存。

场景 4:模拟浏览器请求,绕过基础反爬

多数站点会拦截默认的 curl/wget 请求头,补充 UA、Referer 和 Cookie 即可绕过绝大多数基础反爬校验。

bash

运行

# curl 模拟Chrome浏览器,携带Referer和身份Cookie curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" \ -e "https://example.com/" \ -b "session=abc123; uid=456" \ -o target.html https://example.com/target-page # wget 模拟移动端UA抓取移动版页面 wget -U "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" \ https://example.com/mobile-page

基础反爬大多仅校验 User-Agent,补充浏览器 UA 即可解决大部分 403 问题;需要登录权限的页面,直接复制浏览器中的 Cookie 填入参数即可携带身份请求。

场景 5:POST 提交表单并抓取返回结果

针对需要提交查询的接口或页面,构造 POST 请求提交参数,直接获取结果页或接口数据。

bash

运行

# curl 提交表单格式POST请求,保存查询结果页 curl -L -X POST -d "keyword=test&page=1" \ -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \ -o result.html https://example.com/search # curl 提交JSON格式POST请求,获取接口返回数据 curl -L -X POST -H "Content-Type: application/json" \ -d '{"query":"爬虫","page":1}' \ https://example.com/api/search

curl 是构造复杂请求的利器,-d默认提交表单格式,搭配-H指定 Content-Type 即可提交 JSON、XML 等任意格式数据,非常适合接口类数据抓取。

场景 6:递归下载整站资源,生成离线版本

wget 的递归下载是经典的整站爬虫功能,一行命令即可把站点页面、图片、样式资源全部下载到本地,支持完整离线浏览。

bash

运行

# wget 递归下载文档站,深度3层,转换本地链接,不爬取上级目录 wget -r -l 3 -k -np -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \ https://example.com/docs/

核心参数说明:

  • -r开启递归下载模式
  • -l 3限制最多向下爬取 3 层链接
  • -k将页面内的网络链接转为本地相对路径
  • -np不爬取当前路径的上级目录,避免抓取整个站点

该命令非常适合下载文档站、教程站点,一键生成完整的本地离线版本。

场景 7:限速 + 断点续传,低风险批量下载

批量下载大文件时,限速可避免触发服务器风控,断点续传支持中断后继续,无需从头重新下载。

bash

运行

# wget 限速500KB/s,断点续传下载大文件 wget -c --limit-rate=500k https://example.com/large-file.zip # curl 自动断点续传下载文件 curl -L -C - -O https://example.com/large-file.zip

wget 的--limit-rate支持 k、m 等单位精准控制下载速度,-c支持断点续传;curl 的-C -表示自动识别已下载长度,从断点位置继续下载。

三、进阶技巧:一行命令完成简单数据清洗

配合 sed、awk、grep 等系统自带文本工具,curl/wget 可以直接完成简单的结构化数据提取,无需额外编写脚本。

提取页面标题文本:

bash

运行

curl -s https://example.com | sed -n '/<title>/,/<\/title>/p' | sed 's/<[^>]*>//g'

提取页面所有公开邮箱地址:

bash

运行

curl -s https://example.com/contact | grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

对于规则固定的页面,管道 + 正则就足以完成数据提取,全程一行命令即可完成从抓取到清洗的全流程。

四、适用边界与合规提醒

工具选型边界

  • 适合 curl/wget 的场景:单页抓取、批量下载序列文件、整站离线备份、接口调试与简单数据抓取、临时快速任务
  • 建议使用 Python 的场景:JS 渲染页面解析、复杂反爬对抗、多步骤登录态维持、结构化数据存储、大规模分布式抓取、完善的异常重试逻辑

合规与风险提示

  1. 遵守目标站点的robots.txt协议,不抓取明确禁止爬取的路径
  2. 控制抓取频率与下载速度,避免对目标服务器造成过大压力,高频抓取可能触发 IP 封禁
  3. 不得抓取受版权保护的内容或用户隐私数据,爬虫行为需符合《网络安全法》等相关法律法规
  4. 涉及登录态的抓取需注意账号安全,遵守站点用户协议,不得越权获取非公开数据

curl 和 wget 是每个技术人都应该掌握的基础工具,对于 80% 的轻量爬虫需求,一行命令就能解决,比编写脚本高效得多。熟练掌握这些命令,日常抓取资源、快速验证接口、收集公开数据都能事半功倍。