Python 已经存在了 20 多年 现在是最流行的编程语言之一。它是一种面向对象和解释型的通用语言,这意味着所有错误都在运行时进行检查。Python 也是开源的,是一种高级语言,可用于各种任务,包括 Web 开发、人工智能、大数据、脚本编写等。

您不需要多年的经验即可开始使用 Python。它非常容易理解,这就是为什么如果您想学习编码,大多数软件工程师都会推荐它作为起点。在开发时考虑到用户体验,程序员经常发现 Python 代码更易于阅读,并且与其他语言相比,它们可以用更少的代码行执行命令。

本文将探讨使用 Python 进行网络抓取的基础知识,以及开发人员如何利用基本技术和工具来高效地提取网站数据。

爪哇岛

1
2
3
4
5
国家  样本 {
国家 静止 无效 (字符串参数 []) {
系统.out.println(“你好,世界!”);
}
}

Python

1
打印(“你好,世界!”)

为什么要使用 Python 进行网页抓取?

因此,如果您计划爬行和抓取某个网站,但不知道使用什么编程语言,那么使用 Python 抓取是最好的开始方式。如果您仍然不相信,这里有一些使 Python 更适合的关键功能 网络抓取:

  1. 用更少的代码完成更多的任务: 我们对此怎么强调都不为过。 用 Python 编写代码要简单得多,如果您希望抓取大量数据,那么您肯定不想花更多时间编写代码。 使用 Python,您可以事半功倍。
  2. 社区支持: 由于 Python 很流行并且被广泛认为是一种可靠的抓取语言,因此如果您遇到任何技术问题,您可以通过论坛和大多数社交媒体平台上的数千名社区成员轻松寻求帮助。
  3. 众多的图书馆: 它有大量可供选择的库,特别是用于网页抓取的库,包括 Selenium、BeautifulSoup,当然还有 Crawlbase。
  4. 动态打字: Python 允许您使用变量而无需指定其数据类型,从而节省时间并提高任务效率。
  5. 清晰易懂的语法: Python 的语法由于与英语语句相似而易于理解。代码具有表达力和可读性,缩进有助于有效区分不同的代码块或范围。

但是,使用 Python 进行网页抓取有时会很棘手,因为有些网站可能会阻止您的请求,甚至禁止您的 IP。如果不使用代理,用 Python 编写一个简单的网页抓取程序可能还不够。因此,要使用 Python 轻松抓取网站,您需要 Crawlbase 的 Crawling API 这可以让您避免阻止请求和验证码。

使用 Crawlbase 通过 Python 爬取网站数据

现在我们已经向您提供了应该使用 Crawlbase 在 Python 中构建网络抓取工具的一些原因,让我们继续指导如何使用 Python 抓取网站并构建抓取工具。

首先,这里是我们简单的抓取工具的先决条件:

  1. 爬网帐户
  2. PyCharm 或您喜欢的任何代码编辑器
  3. 的Python 3.x
  4. Crawlbase Python 库

请务必记下您的 Crawlbase 令牌,它将作为您使用 Crawling API 服务。

让我们从安装我们将用于这个项目的库开始。 您可以在控制台上运行以下命令:

1
点安装爬虫库

一旦一切设置完毕,现在就可以编写一些代码了。首先,导入Crawlbase API:

1
 爬行基地 进口 抓取API

然后初始化 API 并输入您的身份验证令牌:

1
api = 爬行API({'令牌': 'USER_TOKEN'})

之后,获取您的目标 URL 或您想要抓取的任何网站。 对于本指南,我们将以亚马逊为例。

1
目标网址 = 'https://www.amazon.com/AMD-Ryzen-3800XT-16-Threads-Processor/dp/B089WCXZJC'

我们代码的下一部分将允许我们下载 URL 的完整 HTML 源代码,如果成功,将在您的控制台或终端上显示结果:

1
2
3
响应 = api.get(targetURL)
if 回复['状态代码'] == 200:
打印(回复['身体'])

如您所见,对 Crawlbase 的每个请求都会附带响应。仅当状态为 200 或成功时,我们的代码才会向您显示已爬网的 HTML。任何其他响应,例如 503 或 404,都意味着网络爬虫失败。然而,该 API 正在全球使用数千个代理,这应该可以提供最佳的数据结果。

现在,我们已经成功构建了一个爬虫。 但是我们想要的是一个刮刀工具,对吧? 因此,我们将使用最方便的方法来抓取一个网站,该网站将以 JSON 格式返回解析数据。

的一大特点是 Crawling API 我们可以使用内置的 数据刮板 对于支持的网站,幸运的是,亚马逊就是其中之一。

要使用数据抓取器,只需将其作为参数传递给我们的 GET 请求。 我们的完整代码现在应该如下所示:

1
2
3
4
5
6
7
8
9
 爬行基地 进口 抓取API

api = 爬行API({'令牌': 'USER_TOKEN'})

目标网址 = 'https://www.amazon.com/AMD-Ryzen-3800XT-16-Threads-Processor/dp/B089WCXZJC'

响应 = api.get(targetURL, {'自动解析': '真的'})
if 回复['状态代码'] == 200:
打印(回复['身体'])

如果一切顺利,您将收到类似以下示例的响应:

响应输出

使用 BeautifulSoup 和 Crawlbase 构建 Python Web 爬虫

现在,如果您想获得更具体的数据,比如产品名称和价格,该怎么办? 如前所述,Python 拥有大量库,包括专门用于抓取的库。 BeautifulSoup 就是其中之一,它是 Python 上一个流行的包,用于解析 HTML 和 XML 数据。 初学者可以利用它也更容易使用。

因此,让我们继续尝试使用 Python 构建一个简单的网络抓取工具 Crawling API 这次是 BeautifulSoup。由于我们使用的是 Python 版本 3.xx,因此让我们安装最新的 BeautifulSoup 包 简称为 BS4:

1
点安装beautifulsoup4

由于我们之前已经安装了 Crawlbase 库,因此您只需创建一个新的 Python 文件并导入 BS4 或 Crawlbase 即可。

1
2
 bs4 进口 美丽汤
爬行基地 进口 抓取API

然后,和之前一样,确保初始化 API 并使用 GET 请求来抓取您的目标 URL:

1
2
3
4
5
6
7
8
9
10
api = 爬行API({ '令牌': 'USER_TOKEN' })

目标网址 = 'https://www.amazon.com/AMD-Ryzen-3800XT-16-Threads-Processor/dp/B089WCXZJC'

响应 = api.get(targetURL)

接下来,我们需要 通过 HTML 源代码到 BeautifulSoup 这样我们就可以得到 对象 解析出具体数据 - lxml 解析器。

if 回复['状态代码'] == 200:
b_soup = BeautifulSoup(响应['身体'], 'lxml')

在此示例中,我们将尝试从亚马逊产品页面获取产品名称和价格。 最简单的方法是使用 find 方法并传入一个参数来抓取我们需要的特定文本。 要了解更多如何选择特定 HTML 元素,您可以查看 BeautifulSoup 文档.

1
2
产品*名称 = b_soup.find('跨度', *='a-size-large product-title-word-break')。文本
产品*价格 = b_soup.find('跨度', *='a-size-medium a-color-price priceBlockBuyingPriceString')。文本

之后,我们只需要编写一个命令来打印输出。

1
2
打印('姓名:', 产品名称)
打印('价格:', 产品价格)

完整的代码现在应该如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 bs4 进口 美丽汤
爬行基地 进口 抓取API

api = 爬行API({ '令牌': 'USER_TOKEN' })

目标网址 = 'https://www.amazon.com/AMD-Ryzen-3800XT-16-Threads-Processor/dp/B089WCXZJC'

响应 = api.get(targetURL)

if 回复['状态代码'] == 200:
b_soup = BeautifulSoup(响应['身体'], 'lxml')

产品名称 = b_soup.find('跨度', 类_='a-size-large product-title-word-break')。文本
产品价格 = b_soup.find('跨度', 类_='a-size-medium a-color-price priceBlockBuyingPriceString')。文本
打印('姓名:', 产品名称)
打印('价格:', 产品价格)

示例输出:

样本输出.jpg

样本输出

最佳 Python Web 抓取库

对于使用 Python 进行网页抓取,有针对各种任务的特定库:

  • 硒: 它可用作 Web 测试工具,高效地自动执行浏览器任务。您可以使用以下 pip 命令安装 Selenium:
1
点安装硒
  • 美丽汤: 这个 Python 库可以解析 HTML 和 XML 文档,并生成解析树以简化数据提取。您可以使用以下 pip 命令安装 Beautiful Soup:
1
点安装beautifulsoup4
  • 熊猫: 它用于数据操作和分析。 Pandas 有助于以首选格式提取和存储数据。
    您可以使用以下 pip 命令安装 Pandas:
1
pip 安装熊猫

在考虑使用 Python 进行网络抓取的合法性时,需要注意的是,不同网站的抓取权限有所不同。要确定网站对网络抓取的立场,您可以参考其“robots.txt”文件。通过将“/robots.txt”添加到要抓取的 URL 来访问此文件。

虽然抓取行为本身可能是合法的,但提取的数据可能对其使用有法律限制。确保您没有踩到:

  • 受版权保护的材料: 是指受知识产权法保护的数据。未经授权使用此类内容是非法的。
  • 个人信息: 可以识别个人身份的数据属于欧盟公民的 GDPR 等隐私法规的管辖范围。如果没有合法理由存储这些数据,最好避免收集它。

一般来说,在抓取之前请务必查看网站的条款和条件,以确保遵守其政策。如果不确定,请考虑在继续之前联系网站所有者以寻求明确同意。了解这些法律方面有助于在法律范围内负责任地使用 Python 进行网络抓取。

网页抓取挑战

对于使用 Python 进行网页抓取,请做好应对过程中的一些挑战的准备。互联网充满了不同的技术、风格和不断的演变,使得抓取起来有点混乱。

  • 网站多样性: 每个网站都是独特的,需要定制方法来有效提取数据,尽管存在重复的模式。
  • 动态性质: 网站不断变化。您的 Python 网络抓取工具一开始可能会完美运行,但随着网站的发展,它可能会遇到错误或难以导航新结构。
  • 适应性: 尽管发生了变化,但大多数网站的更改都是渐进的。通过微小的调整来更新您的抓取工具通常足以适应这些变化。
  • 持续维护: 由于互联网结构不断发展,您的抓取工具需要定期更新和调整才能保持功能和准确性。

Python 网页爬取额外技巧

当您使用 Python 网络抓取工具抓取数据时,请考虑以下有用的提示和技巧:

  • 为您的请求计时: 短时间内发送过多请求可能会触发验证码,甚至导致您的 IP 被封锁。为了避免这种情况,请在请求之间引入超时,从而创建更自然的流量。虽然此问题没有 Python 解决方法,但间隔请求可以消除潜在的块或验证码。
  • 错误处理: 当您使用 Python 抓取网站时,您应该知道网站是动态的,其结构可能会发生意外变化。实施错误处理,例如使用 try- except 语法,特别是如果您经常使用相同的网络抓取工具。事实证明,这种方法在等待元素、提取数据或发出请求时非常有用,有助于有效管理网站结构的变化。

关于 Python 网页抓取的五个有趣事实

使用 Python 从网站获取数据是一项很实用的技能,但它的作用远不止于实际用途。以下是关于 Python 网页抓取的五个有趣小知识,无论您是刚入门还是已经编码多年,它们都可能让您措手不及:

  1. 网络爬取在互联网兴起之前就已经出现了

网络抓取起源于互联网早期,甚至在网站普及之前。第一批“抓取工具”是早期的网络爬虫,例如 World Wide Web Wanderer(创建于 1993 年)。这些爬虫旨在索引越来越多的网站。在当今世界,Python 的 BeautifulSoup 和 Scrapy 库可让您以最少的代码构建现代网络抓取工具。然而,这种技术有着深厚的历史根源。

  1. Python 的 BeautifulSoup 差点被命名为“CuteHTML”
    Python 库 BeautifulSoup 是一款标准的网页抓取工具,其名称背后有一个有趣的起源故事。创建者 Leonard Richardson 选择“Beautiful Soup”来向 Lewis Carroll 的《爱丽丝梦游仙境》中的一首诗致敬。在确定 BeautifulSoup 之前,他考虑过“CuteHTML”这样的名字。最终的选择反映了该库“整理”杂乱 HTML 的能力,就像用缠结的面条做一道美味的汤一样。

  2. 它用于竞争性数据科学
    网络抓取只是获取产品价格或提取内容,但它是竞争性数据科学的一项关键技能。许多参加数据科学竞赛(如 Kaggle)的人使用网络抓取来收集额外数据以增强他们的模型。无论是收集新闻报道、社交媒体更新还是开放数据集,网络抓取都可以帮助参赛者构建更强大的模型。

  3. 网络抓取对人工智能训练有影响
    网络抓取不仅仅是收集静态数据,它还对训练 AI 模型有影响。训练机器学习和自然语言处理模型所需的大量数据集通常来自抓取公众可用的内容,如社交媒体平台、博客或新闻网站。例如,大型语言模型(如 GPT)从大量抓取的网络内容中学习,这使它们能够生成听起来像人类的文本。

  4. 许多网站都有“抓取盾”,而 Python 可以绕过它们
    网页抓取可能很棘手——许多网站都内置了“防护罩”来阻止机器人收集数据。这些防护罩包括 CAPTCHA 反机器人系统和 JavaScript 呈现的内容。不过,Python 拥有像 Selenium 这样的库,可以让抓取工具像真实用户一样与网站交互。这有助于它们通过控制 Web 浏览器并通过模仿人类行为的操作来解决 CAPTCHA 来绕过这些障碍。

总结

就这么简单。只需 12 行代码,我们的 Python 网页抓取工具就已完成,现在可以使用了。当然,您可以随意利用您在这里学到的知识,它将提供已解析的各种数据。借助 Crawling API,您无需担心网站拦截或验证码,因此您可以专注于对您的项目或业务重要的事情。

请记住,这只是一个非常基本的抓取工具。 Python 网络抓取工具可以以多种方式和更大规模地使用。继续尝试不同的应用程序和模块。也许您可能想要搜索和下载 Google 图片、每天监控购物网站上的产品定价变化,甚至为需要数据提取的客户提供服务。

可能性是无限的,使用 Crawlbase 的爬行和抓取 API 将确保您的 Python 网络抓取工具始终保持有效和可靠。