如何通过 5 个简单的步骤抓取数据

已发表: 2020-02-17
目录显示
如何以 5 种简单的方式抓取数据
1. 为数据抓取选择一种编程语言或工具
2. 抓取单个网页并分析组件
3. 确定数据清理和存储策略
4. 创建网页列表或编写用于数据抓取的正则表达式
5. 编写代码并测试
替代数据抓取方法
使用 Excel 筛选功能抓取数据
使用 Microsoft Word 中的 Text-to-Columns 功能按列分隔数据
在 Google 表格中使用 IMPORTXML
在 Google 表格中使用 IMPORTHTML
使用 chrome 扩展
结论

您需要多久从网站上为您的工作抓取数据,这似乎太痛苦了? 这篇博文将教您如何通过 5 个简单的步骤抓取数据。

这篇文章是为需要从网页或 PDF 中提取数据并希望该过程尽可能快速和轻松的软件专业人员编写的。 抓取数据的方法有很多,但本文将重点介绍专业开发人员使用的一些最流行的方法:XPath、正则表达式、Beautiful Soup (BSA)、Scrapy、Python 请求库 (PRL) 和 Selenium Webdriver。 这些刮削工具都可以通过为每个工具提供的说明轻松安装。 下面包含一个总结这些工具的表格,描述了它们的优点/缺点以及适用时有关它们的更多信息的链接。 该表包括一些其他不那么流行的方法,我也尝试过这些方法并且为了完整性而包括在内。

可以使用任何语言在网站上抓取数据。 在本文中,我将演示如何使用 Python 抓取数据,因为它非常易于安装且相当容易学习,特别是如果您已经了解另一种编程语言,因为其语法类似于 Java、C 和 PHP。 Python 支持多个库来抓取表中描述的数据。 抓取是每个人都应该知道如何使用的工具,因为它可以为您的目标市场、竞争对手和/或客户提供有价值的见解。

网页抓取可以帮助您提取不同类型的数据。 您可以通过编写几行代码从电子商务网站上抓取带有定价的房地产列表酒店数据甚至产品数据但是,如果您要爬网并提取数据,则需要处理一些事情。 确保抓取的数据采用可用格式非常重要。 您的代码可以从多个网站提取数据。 提取的数据是干净的,并且在运行算法时不会给出错误的结果。 也就是说,如果您想编写代码或创建一个小型网络抓取项目来从网站抓取数据,您可以通过五个简单的步骤来完成。

5种简单的方法来抓取数据

如何以 5 种简单的方式抓取数据

1. 为数据抓取选择一种编程语言或工具

“人与他的工具一样好”。 因此,您需要以适合您需求的方式选择用于网络抓取的工具。 虽然一些即用型软件可能看起来很容易使用,但它们可能不允许您进行大量配置更改。 同时,许多工具可能没有插件来保存您在数据库或云中抓取的数据。 谈到当今用于抓取数据的编程语言,有 Node.js、Python、Ruby 等。 但其中, Python是最受欢迎的一种,这要归功于它更容易的学习曲线、简单的语法、多个外部库的可用性以及该语言是开源的。

有多个库,如BeautifulSoupScrapy ,可用于爬取网页、创建网络爬虫并在特定时间间隔运行爬取作业。 在将其他系统与您的抓取引擎集成时,Python 提供了极大的灵活性。 您可以轻松地将抓取的数据保存在本地计算机、数据库、 S3 存储中,甚至可以将它们转储到WordExcel文件中。

2. 抓取单个网页并分析组件

在您从亚马逊上的一千个产品页面中抓取产品信息之前,您需要访问该页面并获取整个 Html 页面以对其进行分析并确定策略。 Html 页面中的数据可以驻留在标签中的特定键值对或标签中的文本中。 您可以使用 BeautifulSoup 之类的库来指定要从每个网页上提取数据的确切标签,然后循环运行代码。 这样,对于每个单独的产品网页,您的代码都将运行并提取相同的信息,例如价格详细信息。

3. 确定数据清理和存储策略

甚至在开始抓取数据之前,您就应该决定将数据存储在哪里。 这是因为您如何处理数据将取决于您将其存储在何处。 有多种选择。 您可以在 NoSQL 和 SQL 数据库之间进行选择,具体取决于您正在抓取的数据是否将基于非结构化数据进行结构化。 对于非结构化数据,您可以选择 SQL 数据库,因为您可以将数据存储在由一组属性组成的行中。 对于没有设置属性的非结构化数据,您可以使用 NoSQL 数据库。 就保存数据的数据库而言,对于 SQL,您可以选择 MySQL 或 Postgres。 Amazon RDS提供云端数据库,您可以在其中存储数据并根据使用情况付费。

对于 NoSQL,您可以选择其完全托管且速度极快的解决方案之一,例如DynamoDbElasticSearch不同的数据库具有提供快速检索的优势,有些提供更便宜的每 TB 存储空间 您选择的数据库取决于您的特定用例,因此。 在您决定一项之前,需要对此进行一些研究。 如果您需要存储大的抓取图像和视频,您可以使用 AWS S3Glacier 当您想以存档格式存储大量数据时,使用后者。 您不需要经常访问,而前者是更常用的解决方案。 这就像一个在线硬盘驱动器。 您可以创建文件夹并将文件保存在其中。

数据清洗策略

4. 创建网页列表或编写用于数据抓取的正则表达式

虽然您可以在单个网页上测试您的代码,但您必须要抓取数十或数百个页面,因为您正在执行此项目。 通常,如果您要抓取几个网页,您可以将链接保存在一个数组中,并在抓取页面时对其进行循环。 更好和更常用的解决方案是使用regex 简而言之,它是一种识别具有相似 URL 结构的网站的编程方式。

例如,您可能想要抓取亚马逊上所有笔记本电脑的产品数据。 现在您可能会看到所有 URL 都以“ www.amazon.com/laptop/ <laptopModelNo>/prodData”开头。 您可以使用正则表达式复制此格式,以便提取所有此类 URL,并且您的网络抓取功能仅在这些 URL 上运行 并不是亚马逊网站上的所有 URL。 如果您要抓取的网页太多,我们建议您使用并行处理的方式随时抓取大约十个网页 如果您正在抓取网页并从中提取链接,然后抓取这些链接所指向的网页,那么您可以使用树状方法同时抓取来自根网页的多个子页面。

正则表达式

5. 编写代码并测试

到目前为止,我们讨论的一切都是准备工作。 对于运行代码并完成工作的最后一步。 Web 抓取代码很少能完全按照您的预期工作。 这是因为并非您尝试抓取的所有网页都具有相同的结构。 例如,您在 100 个产品页面上运行抓取代码,发现其中只有 80 个已被废弃。 这背后的原因是20个页面可能处于缺货状态,并且它们的网页结构不同。 编写代码时不会考虑此类异常。 但经过几次迭代后,您可以进行所需的更改。 并从您需要的所有网页中提取数据。

代码测试

替代数据抓取方法

使用 Excel 筛选功能抓取数据

这是从任何网页抓取数据的最简单方法。 除了 Excel,它不需要额外的工具,它不会在您的目标网站或系统上留下足迹,即不进行 API 调用,不设置 cookie 等。如果您可以访问安装了 Excel 的 PC/Mac,那么到目前为止最简单的数据抓取方法。

这个怎么运作

在 Excel 中,打开一个新工作表并在第一个单元格中写下您的目标网站的 URL(例如 http://www.joes-hardware-store.com/)。 在下一个单元格中,输入将从目标网页中提取数据的 HTML 或 XPath 数据过滤器公式(参见下表,了解本示例中使用的 XPath 数据过滤器公式)。 如果要抓取多列数据,请对每列数据重复步骤 1 并将它们并排放置。

如何在 Excel 中获取 XPath 数据过滤器

在 Excel 中,单击文件 > 选项 > 高级,然后转到显示部分。 选中“在功能区中显示开发人员选项卡”旁边的框,然后单击“确定”。 这显示在下面的屏幕截图 1 中:

在 Excel 中,单击 Developer > Reference 然后向下滚动并找到 Microsoft XML Document 3.0(如下面的屏幕截图 2 所示):

点击 MSXML3 Apress 然后点击 OK(如下面的截图 3 所示):

现在我们已经安装了 MSXML3 参考,让我们试一试。 在 Excel 中,在单元格 A1 中输入您的目标网页 URL,然后在单元格 B1 中输入 XPath 数据过滤器公式(例如,要在网页上获取商品“123”的价格,请将 XPath 数据过滤器公式放入单元格 B1 中,如图所示下面的屏幕截图 4 和 5):

现在,使用 Excel 的 CTRL+C 快捷方式将单元格 B1 的内容复制到所有剩余的单元格中。 如下图 6 所示:

将您的目标网页 URL(在单元格 A1 中)复制到 Excel 的地址栏中。 按 Enter 将其加载到浏览器中,然后您的数据神奇地出现在 Excel 中

如您所见,这是一种非常有效的数据抓取方式。 目标网站或您的系统上没有留下任何足迹,即没有进行 API 调用,没有设置 cookie 等。

使用 Microsoft Word 中的 Text-to-Columns 功能按列分隔数据

这种方法比第一种方法复杂一些,但它可以用来从任何具有明确定义的列的网站上抓取数据。 它需要 MS Word 和 Excel 以及一些如下所述的额外工具。 好消息是这种方法确实会在您的目标网站上留下足迹,因此如果您出于营销目的而抓取网站并希望避免检测,则此方法不适合您。

这个怎么运作

在 MS Word 中,创建一个新文档,例如 Joe's Hardware Store Product Listing Scraping Tool,然后将您的目标网页复制/粘贴到文本框中(参见下面的屏幕截图 1)。 通过按 CTRL + G 在 MS Word 中选择 Goto 功能,然后准确键入 <<!DOCTYPE HTML [ENTER]。 这显示在下面的屏幕截图 2 中:

通过按 ALT + F5 选择 MS Word 中的运行功能(如屏幕截图 3 所示),您应该会看到与此类似的内容(请参见下面的屏幕截图 4):

在 Excel 中,选择 Filters > Text to Columns,如下面的屏幕截图 5 所示:

选择 Delimited 然后从下拉菜单中选择您的分隔符(对于本示例,我们使用默认选择的逗号)。

现在,单击下一步并定义“逗号”的位置,即将您的网络数据分隔成列(例如,我使用“,”作为分隔符)。 然后,单击下一步并定义您希望 Excel 如何处理空单元格,即忽略它们或用空白值替换(对于本示例,我们将其设置为“忽略空值”)。 然后,单击 Finish 以完成 Text-to-Columns 功能。

如果您的目标网页没有明确定义的列,您可能需要将其设置为“替代值”,如下面的屏幕截图 6 所示:

正如您从上面的屏幕截图 7 中看到的,我的数据已成功分离为单独的文本列,现在我可以轻松地将它们复制/粘贴到计算机上的另一个位置。

此方法对于从通常具有明确定义的列标题的 PDF 文件中提取数据特别有用。 如果您的目标是使用 Excel 宏从多个 PDF 文件中自动提取数据,它将为您节省大量时间,因为现在,您可以反复使用相同的 MS Word 模板为每个 PDF 文件快速创建多个文档。 3. 使用 MS Excel VBA 编辑器来抓取数据

对于这种方法,我们将使用一个名为 xvba 的工具,它可以从这里下载,它的工作原理就像一个 API(应用程序接口)。 好消息是您根本不需要编写任何代码。 坏消息是您必须输入目标网页的 HTML,即我建议您使用 MS Word 执行此操作,因为它会迫使您将网页真正分解为其组件(参见下面的屏幕截图 1)。

方括号内的数字是电子表格中的单个单元格,其中列标题和行标题用作每个数据字段的名称。 它们的作用类似于变量,即它们被 Excel 视为文本,并且会根据电子表格的结构而改变(例如,如果您选择不同的列来过滤数据)。

在 Google 表格中使用 IMPORTXML

当您使用 IMPORTXML 从网页中抓取数据时,第一步是打开 Google 表格。 第二步是转到工具 > 脚本编辑器。 第三步是将目标网站的 HTML 代码复制/粘贴到文本框中,如下面的屏幕截图 7 所示:

正如您从上面的屏幕截图 8 中看到的,我的数据已成功分离为单独的文本列,现在我可以轻松地将它们复制/粘贴到计算机上的另一个位置。 我们过去曾使用这种方法为在线营销活动抓取 Facebook 和 Twitter 数据。 当您不想使用 GOTO 命令时,这也是从使用 AJAX 的网站上抓取数据的好方法。

在 Google 表格中使用 IMPORTHTML

此方法类似于方法 3,但我们将使用 IMPORTHTML 而不是使用 IMPORTXML 。 第一步是打开 Google 表格。 第二步是转到工具 > 脚本编辑器。 第三步是将目标网站的 HTML 代码复制/粘贴到文本框中。

使用 chrome 扩展

您可以使用 chrome 扩展程序(例如 Data Scraper 和 Save To CSV)来抓取 Web 数据。 由于有免费和付费版本的 chrome 扩展(Data Scraper),我建议两者都看看哪个更适合你。

结论

最多抓取几百页(同时确保在每次运行之间留出几秒钟的间隙)。 使用 Python 编写的 DIY 解决方案可以每月抓取一次网站。 但是,如果您正在寻找企业级 DaaS 解决方案,我们PromptCloud的团队会提供端到端解决方案,您可以在其中向我们提出要求,然后我们将数据交给您,然后您可以即插即用。

基础设施、代理管理,确保您在抓取数据时不会被阻止。 定期运行抓取引擎以更新数据。 我们还会进行更改以适应在相关网站的 UI 中所做的更改。 一切都在我们完全托管的解决方案中处理。 这是一项按使用付费的基于云的服务。 这将满足您所有的网络抓取要求。 无论您是在处理初创公司、跨国公司还是您的研究工作需要数据。 我们为所有人提供数据抓取解决方案。