返回博客

如何自动将网站数据提取到 Excel

-
Automate Data Extraction from Websites to Excel
目录
-

将网站数据导入 Excel,可能是您今天最简单的操作,也可能是一场与动态内容、会话封禁和反爬机制的持久战的开始。

如果您只是从 Wikipedia 这类网站提取公开数据,Excel 的内置工具或许就已足够;但如果尝试从BestBuy 这类网站抓取商品价格,或从 LinkedIn 抓取数据,您很快就会发现事情没那么简单。

本文介绍几种将网站数据自动抓取到 Excel 的方法,从使用 Excel 网页查询和 Power Query,到借助浏览器工具与轮换代理扩展抓取规模,逐一讲解。

方法一:使用 Excel 内置工具

第一种方法使用的是大多数人都已拥有的工具:Microsoft Excel。但需要说明的是,这并非真正意义上的数据抓取,您并没有在模拟浏览器或绕过机器人检测,只是向愿意提供数据的网站礼貌地发出请求。

Excel 网页查询和 Power Query 会发送一个普通请求,如果网站返回的是结构清晰的 HTML 表格,Excel 就能将其提取出来;但有些时候,网站返回的只是一个 JavaScript 外壳,Excel 根本找不到数据所在。

所以这种方法确实能快速见效,但前提是目标网站愿意“配合”;一旦遇到动态内容或有防护机制的网站,整个流程就会中断。

Power Query(获取和转换)

第一个值得使用的内置工具是 Power Query,也就是“获取和转换”功能。其原理很简单:Excel 向页面发送一个基本的 GET 请求,网站返回原始 HTML,Power Query 再尝试提取其中任何看起来像 <table> 的内容。

如果网站配合良好,您就能将数据抓取到结构清晰的 Excel 表格中,并设置后续自动刷新;但如果数据被封装在 JavaScript 里,Excel 就无法识别。

适用场景如下:

  • 处理简单的 HTML 表格
  • 希望在表格中自动更新数据
  • 需要在数据进入表格前进行筛选、重命名或重新整理
  • 不想编写代码,也不想离开 Microsoft Excel

示例:提取 IMDb Top 250 电影榜单数据

IMDb Top 250 Movies 榜单是一个很好的测试案例:数据是静态的,页面结构简单,Microsoft Excel 的 Power Query 无需编写代码即可提取。您需要在 Windows 上使用 Excel 2016 或更高版本,因为 Power Query for Mac 目前仍不完全支持数据抓取。

接下来,我们一步步演示如何将数据从 IMDb 提取到您的电子表格中。

第一步:打开 Excel 并新建工作簿

启动 Excel,新建一个工作簿,并自行命名。

IMG1.png

第二步:打开 Power Query 网页导入工具

在顶部功能区选择“数据”选项卡,系统会弹出一个下拉菜单。

IMG2.png

第三步:打开“获取数据”菜单

点击标有“获取数据”的图标,打开下拉列表。

IMG3.png

第四步:选择“自网站”数据源

选择“自其他来源”,再从下拉菜单中选择“自网站”。

IMG4.png

第五步:输入 IMDb 网址

此时会出现一个新菜单,提供“基本”和“高级”两种选项。

IMG5.png

“基本”适用于只抓取单个网址的情况;“高级”则可以添加多个网址片段,适合处理带参数的链接或需要合并多个端点的场景。

但问题在于,Excel 并不会一次性从多个不同网址抓取完整页面。因此即便使用“高级”模式,除非您自行构建循环或合并逻辑,否则仍然存在限制,这也是很多人在这一步卡住的原因。

为简化操作,选择“基本”,粘贴您的 IMDb 网址,然后点击“确定”。

IMG6.png

第六步:查看导航器面板

在 Power Query 网页导入工具中点击“确定”后,Excel 会尝试解析页面内容,随后弹出导航器面板,在这里可以预览 Excel 认为值得提取的所有数据表。

IMG7.png

第七步:点击 Table 1

左侧列出了网站上检测到的所有 HTML 表格,右侧则实时预览您所点击的内容,先从 Table 1 开始查看。

IMG8.png

Power Query 加载表格后,您会看到结构清晰的 IMDb Top 250 电影数据。右下角有三个按钮:“加载”“转换数据”和“取消”,除非您打算放弃(当然不会),否则不要点击“取消”。

第八步:加载或转换数据

如果表格内容没问题,点击“加载”即可直接导入 Excel 表格;但如果需要筛选行、删除多余列、重命名表头或拆分数值,选择“转换数据”会更合适,它会打开 Power Query 编辑器,让您在数据进入表格前进行整理。

由于本例数据本身就很规整,无需额外处理,直接点击“加载”,列表就会原样导入您的 Excel 表格。

IMG9.webp

大功告成!

网页查询(旧版功能)

如果您接触 Excel 的时间足够久,应该还记得网页查询功能。这是 Excel 最早用于从网站提取数据的尝试,在 21 世纪初十分流行,当时大多数网站仍使用结构清晰的 HTML 表格,一个普通的 GET 请求就能获取所需数据。

那时没有 JavaScript 来打乱结构,也没有反爬机制需要对抗,只需把 Excel 指向目标页面,就能直接将数据抓取到表格中。这种方式简单有效,直到网络环境发生变化。

如果想在今天使用这项功能,需要先在 Microsoft Excel 设置中启用旧版导入功能。

第一步:新建工作簿

按照之前的步骤操作:打开 Excel,新建一个工作簿,并自行命名。

IMG10.png

第二步:打开“文件”菜单

点击功能区左上角的“文件”。

IMG11.png

第三步:打开 Excel 选项

在左侧菜单底部点击“选项”,即可打开“Excel 选项”窗口。

IMG12.png

第四步:进入数据设置

在新窗口左侧栏中选择“数据”,打开 Excel 的数据选项。

IMG13.png

第五步:启用旧版网页导入功能

在“显示旧版数据导入向导”下,勾选“自网站(旧版)”。

IMG14.png

第六步:关闭数据选项

点击“确定”,关闭数据选项窗口。

第七步:打开旧版向导菜单

按照使用 Power Query 时的步骤,依次点击“数据”和“获取数据”,此时会看到一个新选项“旧版向导”。

IMG15.png

第八步:选择“自网站(旧版)”

将鼠标悬停在“旧版向导”上,然后在右侧菜单中点击“自网站(旧版)”。

IMG16.png

第九步:粘贴网址并测试页面

这一步的关键在于了解目标网站,因为这种 Excel 网页查询方式只能抓取内容完全以纯 HTML 加载的页面。

我们之前用的 IMDb 示例在这里行不通,因此改用 Wikipedia 的“按客运量排名的最繁忙机场列表”作为示例。该表格直接存在于页面标记中,Excel 内置的数据抓取工具可以干净利落地提取出来;如果换成动态网站尝试,大概率会出现错误。

IMG17.png

第十步:运行网页查询

点击“转到”运行网页查询,Excel 会跳转到目标页面并显示预览。

IMG18.png

第十一步:打开导入选项

点击“导入”,打开导入选项对话框。

IMG19.png

第十二步:将数据导入工作表

选择当前工作表并点击“确定”,Excel 会将提取的数据填入表格中。

IMG20.webp

大功告成!

方法二:无代码数据抓取工具

使用上述内置工具,您可以将网站数据抓取到 Excel,甚至通过可刷新的查询实现自动化;但面对动态内容、登录页面或 JavaScript 渲染的表格,这些工具就会失效。

仅凭一个普通请求和一张表格,是无法从 LinkedIn、BestBuy 或 Amazon 抓取数据的。如果 Amazon 是您的目标之一,我们的 Amazon CAPTCHA 绕过指南详细介绍了您会遇到的问题及应对方法。如果您不打算自己搭建爬虫,那么使用无代码数据抓取工具会是更合适的选择。

这类工具能帮您完成大部分繁琐工作:发送 HTTP 请求、解析 HTML 或 DOM、浏览页面、定位所需数据,并将其格式化以便导出。

有些工具导出为 CSV 格式,有些则直接将数据发送到 Excel。无论形式如何,其本质仍是一种数据抓取工具,因此要实现稳定的自动化,需要根据数据来源、目标数据和工作量选择合适的工具。

选择无代码数据抓取工具时,需要注意以下几点:

  • 易用性

如果使用无代码数据抓取工具的难度不亚于学习编程,那不如自己动手开发。有一定学习曲线属正常现象,但工具本身应当直观、易于上手。

  • 浏览器模拟能力

大多数现代网站的页面内容是在浏览过程中动态生成的。如果数据抓取工具无法处理 JavaScript 渲染、滚动、点击或登录流程,就会错过大量数据。真正的数据抓取意味着要模拟完整的浏览器会话,包括等待动态内容加载、处理延迟,并在尝试抓取数据前与页面进行交互。

  • 元素定位精度

当工具具备模拟真实浏览器的能力后,接下来需要考虑的是:它能否精准且稳定地重复抓取所需数据?一种可靠的无代码数据抓取工具应当支持 CSS 选择器和 XPath。

点选操作对于静态页面足够用,但一旦数据藏在下拉菜单、弹窗或嵌套元素中,就需要更精细的定位方式。优秀的数据抓取工具还会根据页面结构给出提示,省去反复猜测的麻烦;如果数据被隐藏起来,工具也应当有办法将其挖掘出来。

  • 分页处理

工具找到目标数据后还需要能够继续抓取,因为有价值的数据往往分布在多个页面中。应选择同时支持两种常见分页策略的数据抓取工具:基于点击的导航和基于网址规律的爬取。

  • 调度与自动化支持

没有人愿意每天早上手动点击“运行”。无代码数据抓取工具可以根据工作流需求提供调度控制,自动完成抓取过程,将结果发送到 Excel,并在出现问题时发出提醒。

  • 速率限制、CAPTCHA 处理与 IP 轮换

请注意:网站不会为您的爬虫铺好红毯——只要爬虫表现得不像真人,网站就会立即启动速率限制、生成浏览器指纹并弹出 CAPTCHA。您需要一种能够悄然应对这些防护的无代码工具,具备内置 CAPTCHA 识别与绕过功能、随机等待时间,以及完整的代理轮换支持。

工具亮点

下面我们基于上述功能,对比几款目前常用的无代码网络爬取工具:

Table_Automate Data Extraction from Websites to Excel.webp

方法三:使用网站 API

有时候,数据抓取并不是合适的做法:如果网站提供 API,应优先使用它。

这样您无需应对动态页面或绕过 CAPTCHA,还可以借助 Power Query、Python 或支持 API 的无代码工具,将数据自动导入 Excel。

不过这也有代价:并非每个网站都提供 API,即使提供,核心数据往往也需要 API 密钥、受使用限制,或位于付费墙之后。尽管如此,如果您的目标是将网站数据自动抓取到 Excel,只要有 API 可用,这就是最稳定的方式。

在使用爬虫之前,先查看该网站的 /api/ 目录或开发者文档,如果存在 API,就不必再进行数据抓取了。

实际操作是怎样的?

比如说,您是一名开发者,正在测试某个平台,需要一批逼真的虚拟用户资料,这时可以使用像Random User Generator这样的免费开源 API。如果您需要 50 条资料,可以使用以下 URL:

https://randomuser.me/api/?results=50

接下来,我们使用 Power Query 将这些数据直接导入 Excel。

第一步:新建工作簿

打开一个新的 Excel 工作簿,并随意命名。

IMG21.png

第二步:进入“数据”选项卡

在顶部功能区中,点击“数据”。

IMG22.png

第三步:选择“从 Web”数据源

点击“获取数据”,将鼠标悬停在“其他来源”上,然后在弹出的菜单中选择“从 Web”。

IMG23.png

第四步:粘贴 URL

在弹出的窗口中,粘贴 API 的 URL:

IMG24.png

第五步:连接到 Power Query 编辑器

点击“确定”进行连接,等待 Power Query 编辑器加载完成,您将看到一个预览表格,其中包含 results 和 info 两个字段。

IMG25.png

第七步:展开 results 列表

点击 results 旁边的“List”,即可打开 API 返回的用户记录列表。

IMG26.png

第八步:将列表转换为表格

在顶部功能区的“列表工具”选项卡下,点击左侧第一个选项“到表”。这样可以将记录列表转换为表格,方便您在 Excel 中展开并处理数据。随后会弹出一个新对话框:

IMG27.png

第九步:确认表格设置

在弹出的“到表”窗口中,保留默认设置即可:“分隔符”为“无”,“额外列”为“显示为错误”。直接点击“确定”继续,因为这里不需要拆分文本或处理额外列,无需做任何更改。

此时您会看到一个表格,其中 Column1 列包含多行记录。

IMG28.png

第十步:展开记录字段

点击 Column1 旁边的展开图标(即两个箭头相互指向外侧的图标),即可看到可用字段列表,默认全部勾选。

IMG29.png

第十一步:选择所需字段

取消勾选“选择所有列”,然后手动勾选您希望保留在 Excel 表中的字段。

IMG30.png

第十二步:加载展平后的表格

点击“确定”,数据将以展平的表格形式呈现,不过 name 和 location 等部分列仍会包含嵌套记录。

IMG31.webp

第十三步:展开嵌套列

对于仍显示为记录的列(例如 login、name 或 location),点击该列名旁边的展开图标,然后选择需要保留的具体字段。例如,展开 login 列即可选择 username 或 uuid 等字段。

IMG32.webp

第十四步:将数据加载到 Excel

所有所需字段都显示出来后,在顶部功能区点击“关闭并上载”。Power Query 随即关闭,数据会自动加载到您的 Excel 表中。

IMG33.webp

大功告成!

其他自动化方法

除了 Microsoft Excel 的内置工具、无代码网络爬取软件和 API 之外,有些情况下您会希望对数据导入电子表格之后的处理方式拥有更多控制权,这时就需要用到Visual Basic for Applications(VBA)了。

Visual Basic for Applications(VBA)

VBA 是微软用于在 Excel 及其他 Office 应用中实现任务自动化的脚本语言,由来已久;它可以通过 XMLHTTP 或 WinHTTP 抓取简单页面,但这并非它如今最有价值的用途。

带有 JavaScript 或反机器人防护机制的现代网站会立即中断这一流程。VBA 真正擅长的,是对已经导入的数据(无论来自 API、Excel 网络查询还是数据抓取工具)进行后续处理的自动化。

假设您刚通过 Random User Generator API 将 50 条虚拟用户资料导入 Excel 表格,现在需要筛选出其中的女性资料,并单独发送给其他团队,而不改动其余数据。

一段简短的 VBA 宏即可筛选出这些行,将其复制到新工作表,并自动保存文件。

下面来看具体操作方法:

第一步:启用“开发工具”选项卡

在已打开的工作表中,右键点击功能区任意位置(例如“开始”或“插入”选项卡),选择“自定义功能区”,即可启用“开发工具”选项卡。

IMG34.webp

第二步:将“开发工具”选项卡添加到功能区

此时会弹出“Excel 选项”窗口,在右侧面板中勾选“开发工具”。

IMG35.png

第三步:确认并查看“开发工具”选项卡

点击“确定”,此时功能区会出现一个名为“开发工具”的新选项卡。

IMG36.webp

第四步:打开 Visual Basic 编辑器

点击“开发工具”选项卡,再点击最左侧的“Visual Basic”按钮。

IMG37.webp

第五步:查看 Visual Basic 编辑器

此时您会看到 VBA 编辑器:

IMG38.png

第六步:插入模块并粘贴代码

点击“插入”,然后选择“模块”。

IMG39.png

粘贴以下代码:

Sub CopyFemaleProfilesToNewWorkbook()
    Dim wsSource As Worksheet
    Dim wbTarget As Workbook
    Dim wsTarget As Worksheet
    Dim lastRow As Long
    Dim writeRow As Long
    Dim i As Long
    Dim savePath As String

    ' Set your source sheet
    Set wsSource = ThisWorkbook.Sheets("original") ' Adjust name if needed

    ' Create a new workbook and set the target sheet
    Set wbTarget = Workbooks.Add
    Set wsTarget = wbTarget.Sheets(1)
    wsTarget.Name = "Female Profiles"

    Application.ScreenUpdating = False

    ' Copy header
    wsSource.Rows(1).Copy Destination:=wsTarget.Rows(1)
    writeRow = 2

    ' Find the last row with data in source sheet
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row

    ' Loop through rows and copy female profiles
    For i = 2 To lastRow
        If LCase(wsSource.Cells(i, 1).Value) = "female" Then
            wsSource.Rows(i).Copy Destination:=wsTarget.Rows(writeRow)
            writeRow = writeRow + 1
        End If
    Next i

    ' Build file path to save the new workbook
    savePath = ThisWorkbook.Path & Application.PathSeparator & "female_acc.xlsx"

    ' Save and close the new workbook
    wbTarget.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    wbTarget.Close SaveChanges:=False

    Application.ScreenUpdating = True

    MsgBox "Female profiles saved to: " & savePath, vbInformation
End Sub

实际效果如下:

IMG40.png

第七步:运行脚本并查看保存位置

点击“运行”,系统会弹出消息确认新工作簿的保存位置。

IMG41.png

第八步:打开新文件

大功告成!打开文件,即可看到导出的数据。

IMG42.webp

Python 自动化(面向开发者)

到某个阶段,您会遇到瓶颈:Excel 无法解析 JavaScript,网络查询在重定向面前失效,无代码爬取工具开始超时,目标网站会封锁您的 IP、标记您的行为,或返回空白内容。

这时就该换一种思路了:如果您想将网站数据自动提取到 Excel,而常规工具已无法满足需求,Python 就是答案。

对于防护较弱的网站,使用 requests 搭配轮换代理服务往往能取得出乎意料的效果:速度快、可编写脚本、便于批量执行。只要结构设计得当,这种方法可以应对大多数由服务器端渲染 HTML 的数据抓取任务。我们在《How to Scrape Amazon Product Data With Python in 2025》一文中详细介绍了具体步骤。

但如果网站防护更严密,就需要借助无头浏览器进行更深层次的定制。Selenium 搭配Undetected ChromeDriver,可以让您完全掌控真实浏览器环境,并具备更难被检测的能力。

这样您就可以登录账号、完成点击流程、加载隐藏内容,并像真人一样抓取网站数据。再结合住宅代理、时区伪装和行为脚本,就能打造出一个难以被区分的机器人。这种方式速度较慢,但在大规模抓取或面对严密防护时,稳定性才是关键。

关键在于根据目标网站选择合适的技术方案:简单抓取能解决问题时,就不必过度设计;但也不要低估如今网站在拦截爬虫上的激进程度,AI 热潮更是让情况雪上加霜。

实用建议

数据抓取本身处于灰色地带,具体是否合规取决于抓取对象。如果您抓取的是公开数据、无需登录或付费即可访问,通常不会有问题。

但一旦您开始抓取受限内容、需密码访问的页面,或付费墙后的数据,在许多司法辖区都可能已经触犯法律。请务必查看网站的 robots.txt 文件,它虽然不具法律效力,但能说明网站所有者认为哪些内容不允许爬虫访问。

结语

至此,您已了解将网站内容自动抓取到 Excel 的所有可行方法。

Microsoft Excel 的内置工具非常适合在网站配合的情况下,轻松提取静态网页数据;无代码网络爬取工具无需编写任何代码即可抓取静态和动态网站内容,但前提是页面没有设置重重防护。如果有 API 可用,就无需进行数据抓取,直接将其接入 Excel 即可。

但一旦遇到动态内容、CAPTCHA 或反机器人系统,就需要构建自定义的 Python 爬虫。想在数据抓取这场长期博弈中占据优势,靠的不是蛮力,而是在合适的时机使用合适的工具。想获取更多在不被封锁的情况下将网站数据提取到 Excel 的技巧?欢迎加入我们的Discord 社区!

能否从需要登录凭证的网站提取数据?

可以,但操作更复杂:您需要先通过基于会话的抓取方式或 Selenium 等浏览器自动化工具登录,同时也要注意,抓取登录后的内容可能违反服务条款或法律规定。

如何将网站多个页面的数据抓取到 Excel 中?

可以使用带有分页逻辑的抓取工具或 Python 脚本,逐页循环抓取,并将结果实时存入 CSV 或 Excel 文件;如果 URL 模式有规律可循,Power Query 有时也能处理多页数据。

如果网站使用 JavaScript 加载数据,应该怎么办?

需要使用能够执行 JavaScript 的工具,例如 Selenium 或 Playwright;requests、Power Query 等静态抓取方式在这种情况下无法奏效,您需要借助无头浏览器完整渲染页面内容。

抓取任意网站的数据是否合法?

视情况而定:公开内容通常可以抓取,但抓取私密或受限内容可能违反法律或服务条款。抓取前请务必查看 robots.txt,并了解该网站的相关政策。

如何设置自动定时将数据提取到 Excel?

您可以通过 Power Query 的定时刷新功能实现自动化,或编写由任务计划程序(Windows)或 cron(Mac/Linux)触发的 Python/VBA 脚本,将数据输出到 Excel 文件或关联的 CSV 文件中。

了解更多
-

相关文章