在现代网络中,许多网站使用 AJAX(异步 JavaScript 和 XML)通过动态加载内容来改善用户体验。AJAX 不会刷新整个页面,而是根据用户的操作(例如滚动或单击)加载部分页面,而无需重新加载整个页面。这可以使体验更流畅、更快速,但在从这些网站抓取数据时会带来挑战。

当您尝试抓取 AJAX 网站时,您可能会发现所需的数据不在静态 HTML 中。相反,它是由 JavaScript 动态加载的,因此当您查看页面源代码时无法获取内容。要提取此数据,您需要使用可以与 AJAX 请求交互的特殊抓取技术。

在这篇博客中,我们将引导你完成从 AJAX 驱动的网站抓取数据的整个过程,从理解 AJAX 到使用 Python 等强大的工具和 爬虫库 Smart Proxy 优化你的抓取工具并避免诸如被阻塞之类的常见问题。

让我们开始吧!

目录

爬取 AJAX 网站数据的挑战

对于初学者来说,从 AJAX 驱动的网站抓取数据可能需要一些时间。这是因为 AJAX 会动态加载内容,因此首次打开页面时,所需的数据并不在初始 HTML 源中。抓取 AJAX 驱动的网站需要处理动态加载内容的工具和技术。然而,就像 MacBook 可能无法进入 睡眠模式 由于未解决的流程,AJAX 内容需要额外的步骤来复制用户交互的动态特性。

爬取 AJAX 网站数据的挑战

AJAX 的工作原理是在后台向服务器发送请求,并且只更新页面的特定部分。例如,当您向下滚动产品页面时,将加载更多项目,或者当您单击按钮时,将出现新内容。这对用户体验来说很棒,但传统的网络抓取工具很难提取内容,因为数据是实时加载的,而且通常是在页面渲染完成后。

当您尝试抓取此类网站时,您获得的静态 HTML 将仅具有基本布局和元素,但没有通过 AJAX 调用加载的数据。因此简单的抓取是行不通的。您需要模仿页面发出的相同 AJAX 请求来获取动态数据。

抓取 AJAX 网站的技术

抓取 AJAX 网站需要特殊技术,因为内容在初始页面加载后加载。以下是两种方法。

复制 AJAX 调用

复制 AJAX 调用是直接从服务器获取动态内容的最简单方法。

  • 怎么运行的:使用浏览器的开发人员工具查找 AJAX 请求 URL 和参数。这些请求在后台加载,您可以在抓取工具中复制这些请求以直接获取数据。
  • 为什么它有帮助:这种方法更快,因为您不需要渲染整个页面,您可以更快地获得内容。

使用无头浏览器渲染 JavaScript

像 Selenium 这样的无头浏览器可以呈现 JavaScript,包括 AJAX 内容。

  • 怎么运行的:无头浏览器模拟真实用户操作,如滚动或单击以触发 AJAX 请求并加载内容。
  • 为什么它有帮助:当网站需要用户交互或复杂的 JavaScript 来加载数据时,这很有用。

这些方法可以帮助您绕过抓取 AJAX 网站的挑战。在下一节中,我们将介绍可用于执行此操作的工具。

抓取 AJAX 数据的工具

要从 AJAX 网站抓取数据,您需要合适的工具。以下是一些最流行的 AJAX 数据抓取工具的列表。

Python:请求和 BeautifulSoup

Python 是一种流行的网页抓取语言,因为它简单易用且拥有丰富的库。使用 Python 抓取 AJAX 页面时,最流行的有两个库:

  • 要求:这可让您向网站发出 HTTP 请求并获取内容。它易于使用,并且一旦您知道请求 URL,便可很好地复制 AJAX 调用。
  • 美丽汤:获取 HTML 内容后,BeautifulSoup 可帮助您解析和提取所需数据。它非常适合浏览 HTML 结构并提取特定元素,例如产品名称、价格或其他动态内容。

使用带有 BeautifulSoup 的请求对于基本的 AJAX 抓取来说是一个很好的选择,特别是当您可以直接复制 AJAX 请求时。

用于浏览器自动化的 Selenium

在处理严重依赖 JavaScript 的复杂网站时,Selenium 是一个更强大的工具。与仅获取原始 HTML 的 Requests 不同,Selenium 可让您像人类一样与网站进行交互。

  • 怎么运行的:Selenium 自动执行浏览器操作,例如单击按钮或向下滚动页面,这可以触发 AJAX 请求来加载更多数据。
  • 为什么它有帮助:它适用于抓取由于用户交互而动态加载内容的网站,例如无限滚动或交互式地图。

Selenium 提供了处理 JavaScript 呈现的页面的能力,使其成为更复杂的抓取任务的理想选择。

抓取 AJAX 页面:分步指南

抓取 AJAX 驱动的网站可能看起来很复杂,但只要使用正确的方法和工具,就​​可以做到。在本节中,我们将逐步指导您完成抓取 AJAX 的过程。我们将使用一个真实的例子向您展示如何使用 AJAX 端点从福布斯获取实时亿万富翁数据。

1. 设置爬虫

在开始抓取之前,您需要安装一些基本库,尤其是在使用 Python 的情况下。对于抓取 AJAX 内容,最常用的库是:

  • 要求:获取网页并进行 AJAX 调用。
  • 美丽汤:从页面解析并提取数据。

使用 pip 安装这些库:

1
pip 安装请求 beautifulsoup4

安装后,将它们导入到您的脚本中并设置初始结构以开始您的抓取之旅。

2. 识别 AJAX 请求

第一个任务是识别加载动态内容的 AJAX 请求。具体操作如下:

  1. 在 Google Chrome 中打开网站。例如,我们使用 Forbes 实时亿万富翁榜单网址.
  2. 右键单击页面并选择检查或按 Ctrl+Shift+I 打开开发人员工具。
  3. 转到“网络”选项卡并过滤 XHR(XMLHttpRequest),其中显示 AJAX 请求。
  4. 刷新页面。注意 XHR 部分中出现的新请求。
图像检查 AJAX 请求

数据可通过 AJAX API 端点获取。以下是 API URL:

1
https://www.forbes.com/forbesapi/person/rtb/0/-estWorthPrev/true.json?fields=rank,uri,personName,lastName,gender,source,industries,countryOfCitizenship,birthDate,finalWorth,est

此端点返回有关亿万富翁的数据,例如他们的姓名、排名、财富和其他详细信息。要获取数据,我们只需向此 URL 发出 HTTP 请求。

3. 在 Scraper 中复制 AJAX 请求

现在我们知道了 AJAX 端点,我们可以在抓取工具中复制此请求。如果您使用请求,以下代码将帮助您获取数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
进口 要求

# AJAX 请求的 URL
网址= “https://www.forbes.com/forbesapi/person/rtb/0/-estWorthPrev/true.json?fields=rank,uri,personName,lastName,gender,source,industries,countryOfCitizenship,birthDate,finalWorth,est”

# 向 URL 发送 GET 请求
响应 = requests.get(url)

# 检查请求是否成功
if 响应.status_code == 200:
数据 = 响应.json()
打印(数据)
其他:
打印(“无法检索数据”)

4.解析响应

一旦收到响应,我们就需要解析 JSON 数据以提取有用的信息。响应将包含亿万富翁名单,其中包含姓名、排名、财富等详细信息。以下是访问相关信息的方法:

1
2
3
4
5
6
7
8
9
10
11
# 解析 JSON 响应
人员 = 数据[‘人员列表’][‘人员列表’]

# 循环遍历列表并提取详细信息
in 人员:
姓名 = 人[‘人物姓名’]
等级 = 人['秩']
财富 = 人['最终价值']
国家 = 人['公民权国家']

打印(f"{秩}. {名称} - {财富} - {国家}")

该代码将输出数据集中每个亿万富翁的姓名、等级、财富和国家。

1
2
3
4
5
6
7
8
9
10
1. 伊隆·马斯克 - 303733.071 - 美国
2. 拉里·埃里森 - 224761.9 - 美国
3.杰夫·贝佐斯-219362.138-美国
4.马克·扎克伯格 - 191735.874 - 美国
5.Bernard Arnault 及家族 - 158184.432 - 法国
6. 沃伦·巴菲特 - 147991.306 - 美国
7. Larry Page - 143070.973 - 美国
8.谢尔盖·布林 - 136850.184 - 美国
9. Jensen Huang - 123866.414 - 美国
.... 更多的

5.将数据存储在 JSON 文件中

提取必要信息后,您可能希望将其存储以供日后使用。要将数据保存在 JSON 文件中,请使用以下代码:

1
2
3
4
5
进口 JSON

# 将数据保存到 JSON 文件中
- 打开(“亿万富翁数据.json”, “w”) as f:
json.dump(人员,f,缩进=4)

这将创建一个 billionaires_data.json 以可读格式存储所有提取数据的文件。

在下一节中,我们将讨论如何使用 Crawlbase 优化爬虫 Smart Proxy 避免刮擦时被堵塞。

使用 Crawlbase 优化你的爬虫 Smart Proxy

抓取 AJAX 网站时,IP 阻止和速率限制等问题可能会破坏您的努力。 爬虫库 Smart Proxy 通过管理 IP 轮换和保持抓取工具匿名,帮助解决这些问题。以下是它可以优化抓取的方法:

1. 避免 IP 封锁和速率限制

Crawlbase 会轮换 IP 地址,使请求来自不同的用户。这可以防止您的抓取工具因发送过多请求而被阻止。

2. 地理定位精准数据

您可以为您的请求选择特定的位置,确保您抓取的内容与地区相关且特定于地区。

3. 绕过 CAPTCHA 和反机器人措施

Crawlbase 与 CAPTCHA 解决工具的集成可帮助您的抓取工具绕过常见的反机器人保护,而无需人工干预。

4. 轻松设置和集成

使用 Crawlbase Smart Proxy,只需将您的代理 URL 替换为您独有的 Crawlbase 令牌,然后按如下方式设置您的请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
进口 要求

网址= “https://www.forbes.com/forbesapi/person/rtb/0/-estWorthPrev/true.json?fields=rank,uri,personName,lastName,gender,source,industries,countryOfCitizenship,birthDate,finalWorth,est”

# 代替 _USER_TOKEN_ 使用您的 Crawlbase 令牌
代理网址 = 'http://_USER_TOKEN_:@smartproxy.crawlbase.com:8012'
标头= {
“用户代理”: “Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:131.0)Gecko/20100101 Firefox/131.0”
}

代理={“http”:代理网址, “https”: 代理网址}
响应 = 请求.get(url = url,headers = headers,proxies = proxies,verify =)

if 响应.status_code == 200:
打印(响应.json())
其他:
打印(“请求失败”)

备注:您可以通过以下方式获取代币 创建一个帐户 在 Crawlbase 上。您将获得 5000 个免费积分,轻松开始。免费试用无需信用卡。

这个简单的设置允许您无缝地旋转 IP 并避免抓取障碍。

总结

抓取 AJAX 网站数据比较棘手,但只要使用正确的技术和工具,还是可以做到的。了解 AJAX 的工作原理并使用请求、Selenium 和无头浏览器等工具,您就可以获得所需的数据。

此外,使用以下方式优化你的爬虫 爬虫库 Smart Proxy 确保您能够可靠地抓取数据,而不会遇到 IP 阻止或 CAPTCHA 等问题。这不仅可以提高抓取工具的效率,还可以通过避免不必要的中断来节省时间。

请记住始终尊重您正在抓取的网站的服务条款,并确保抓取行为合乎道德。通过正确的方法,抓取 AJAX 网站可以成为为您的项目收集有价值数据的强大工具。

常见问题

问:什么是 AJAX,为什么从 AJAX 网站抓取数据很困难?

AJAX(异步 JavaScript 和 XML)是网站用来更新页面部分内容而无需重新加载整个页面的技术。这种动态内容加载使抓取变得更加困难,因为数据不会像静态页面那样加载。它是通过请求在后台加载的。要抓取 AJAX 网站,您需要找到这些请求并复制它们以获取数据,这比抓取静态页面更复杂。

问:如何在不使用浏览器的情况下抓取 AJAX 内容?

您可以通过分析网站的网络流量并找到它用于加载数据的 API 端点,无需浏览器即可抓取 AJAX 内容。您可以使用 Python 的请求库等工具进行相同的 API 调用并获取数据。您只需要正确复制标头和请求参数。但有些网站需要 JavaScript 渲染,在这种情况下,您需要 Selenium 或 Puppeteer 等无头浏览器来完全加载和抓取内容。

问:Crawlbase 如何 Smart Proxy 帮助 AJAX 抓取吗?

爬虫库 Smart Proxy 通过管理您的 IP 地址并绕过 CAPTCHA 和速率限制,帮助您更高效地抓取数据。它提供轮换代理,因此您的请求看起来好像来自不同的 IP,因此您在抓取 AJAX 数据时不会被阻止或限制。这使您的抓取过程更加可靠,并且您可以不间断地获取数据。