网页抓取是一种从网站提取数据的有效方法,但将杂乱的 HTML 转换为清晰、结构化的信息却是一项巨大的挑战。Perplexity AI 正是为此而生。借助 AI,您可以更快、更准确地提取数据。

在本篇博文中,我们将向您展示如何使用 Perplexity AI 在 Python 中进行网页抓取。您将学习如何抓取 HTML 内容,将其转换为 Markdown 以提高可读性,以及如何使用 AI 提取所需数据。我们还会向您展示如何 Crawlbase Smart AI Proxy 帮助您在抓取受保护的网站时避免被屏蔽和验证码。立即注册即可获得 5,000 个免费积分。

本博客面向开发人员、分析师或任何想要更智能地抓取网络信息的人。

📚 目录

  1. 为什么要使用 Perplexity AI 进行网页抓取?
  2. 设置 Python 环境
  1. 使用 Perplexity AI 进行网页抓取的分步指南
  1. Perplexity AI 在网页抓取中的挑战与局限性
  2. 避免被阻止:使用 Crawlbase Smart AI Proxy
  3. 总结
  4. 常見問題解答

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

传统的网页抓取使用诸如 Requests 和 BeautifulSoup 之类的 Python 库从网站的 HTML 代码中提取数据。这种方法对于简单的网站来说效果很好,但当 HTML 代码混乱或复杂时,就会变得非常困难。

这就是 Perplexity AI 的作用所在。

Perplexity AI 是一款智能工具,能够理解自然语言,并从原始 HTML 内容中挖掘结构化数据。将其与网页抓取功能结合使用,可以更轻松地提取干净、有用且井然有序的数据。

Perplexity AI 用于抓取数据的好处:

  • 从复杂的网页中提取数据
  • 减少编写自定义解析逻辑所花费的时间
  • 与 Markdown 格式的 HTML 兼容,使数据提取更加准确
  • 返回 JSON 等结构化输出

通过使用 Perplexity AI 在 Python 中进行网页抓取,您可以更快、更智能、更高效地进行抓取。

设置 Python 环境

在使用 Perplexity AI 进行网页抓取之前,我们需要准备 Python 环境。此设置可确保一切顺利运行,并有助于避免后续出现错误。

安装Python

如果你还没有安装 Python,请从 官方网站。Python 是我们用来发送请求、处理网络数据和与 Perplexity API 通信的主要语言。

创建虚拟环境

虚拟环境可以使您的项目依赖关系保持有序,并避免与其他 Python 项目发生冲突。

打开终端或命令提示符并运行:

1
python -m venv perplexity_env

然后激活环境:

  • Windows上:
1
perplexity_env\Scripts\activate
  • macOS/Linux:
1
资源 perplexity_env/bin/激活

安装所需的库

现在,让我们安装所需的 Python 包:

1
pip 安装 beautifulsoup4 markdownify openai 请求
  • beautifulsoup4: 解析 HTML
  • markdownify:将 HTML 转换为 Markdown
  • openai:连接 Perplexity API(使用与 OpenAI 兼容的格式)
  • requests:发送 HTTP 请求

设置 Perplexity API 访问

要使用 Perplexity 进行网页抓取,您需要一个 API 密钥。Perplexity 提供与 OpenAI 兼容的 API,这意味着您可以使用与 OpenAI 的 GPT 模型相同的代码格式。

以下是如何设置它:

  1. 获取您的 API 密钥 来自您的 Perplexity 帐户仪表板。
  2. 在代码中设置 API 密钥 喜欢这个:
1
2
3
4
5
6
,来自 openai 进口 OpenAI

客户端=OpenAI(
api_key=“ “,
基本网址=“https://api.perplexity.ai”
)

确保您的 API 密钥安全并且绝不在代码中公开分享它。

使用 Perplexity AI 进行网页抓取的分步指南

在本节中,我们将向您展示如何使用 Perplexity AI 构建 Python 网页爬虫。您将学习如何爬取网页、清理内容、将其转换为 Markdown 格式,以及如何使用 Perplexity AI 提取数据。我们将使用 BeautifulSoup 仅选择页面中必要的部分,避免使用额外的 HTML 代码,因为这些 HTML 代码可能会因使用更多令牌而增加成本。

我们将使用以下 URL 作为示例:

1
https://www.amazon.com/Art-War-DELUXE-Sun-Tzu/dp/9388369696/ref=sr_1_1

发送请求并解析 HTML

首先,我们将向目标网站发送 HTTP 请求并检索其 HTML 内容。将以下 Python 代码保存在名为 crawl.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
,来自 请求异常 进口 请求异常
,来自 urllib3.异常 进口 不安全请求警告
进口 要求

# 仅抑制来自 urllib3 的单个警告。
请求.包.urllib3.disable_warnings(类别=InsecureRequestWarning)

标头= {
'接受': '文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/avif,图像/webp,图像/apng,*/*;q=0.8,应用程序/签名交换;v=b3;q=0.7',
'用户代理': “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/137.0.0.0 Safari/537.36”
}

DEF (网址)-> STR:
尝试:
响应 = 请求.get(
网址,
标题=标题,
验证=,
超时=30
)
响应.raise_for_status()

回报 响应文本

请求异常 as 错误:
打印(f"\n无法抓取网址'{网址}': {错误}\n")
提高

if __名字__ == “__主要的__”:

html_content = 抓取(“https://www.amazon.com/Art-War-DELUXE-Sun-Tzu/dp/9388369696/ref=sr_1_1”)
- open('输出.html', 'w', 编码='utf-8') as 文件:
文件.write(html_content)

使用以下命令运行脚本:

1
python crawl.py

执行后,它将生成一个名为的输出文件 output.html.

亚马逊书页浏览器输出

注意:
有时,由于亚马逊阻止自动请求,可能会出现以下错误:

1
无法将 html 解析为 markdown: '无类型' 对象没有属性 '文本'

如果发生这种情况,在浏览器中打开 output.html 可能会显示意外或空的结果,如下所示:

亚马逊书页浏览器输出

这是使用机器人保护的网站的常见问题。为了解决这个问题,您可以使用模拟真实浏览器的 HTTP 标头,或者采用更高级的解决方案,例如 Crawlbase Smart AI Proxy,稍后将会讨论。

将 HTML 转换为 Markdown 以供 AI 处理

当我们发送干净、简化的文本而不是原始 HTML 时,Perplexity AI 的表现会更好。为了实现这一点,我们将使用 markdownify 将 HTML 转换为 降价。仅发送相关部分可减少令牌使用量并提高 AI 响应的质量。

我们将使用 BeautifulSoup 解析 HTML 内容。将以下代码保存在名为 parse.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
,来自进口
,来自 bs4 进口 美丽汤
,来自 markdownify 进口 markdownify as md

DEF 解析 HTML 到 Markdown 格式(html_内容)-> STR:
尝试:
汤 = BeautifulSoup(html_content, “html.解析器”)
元素 = 汤.查找(id='centerCol')

回报 MD(STR(元素.文本)
特殊课程 as 错误:
打印(f“\n无法将 html 解析为 markdown: {错误}\n")
提高

if __名字__ == “__主要的__”:

html_content = 抓取(“https://www.amazon.com/Art-War-DELUXE-Sun-Tzu/dp/9388369696/ref=sr_1_1”)

markdown_content = 解析html到markdown格式(html内容)
- open('输出.md', 'w', 编码='utf-8') as 文件:
文件.写入(markdown内容)

现在,使用以下命令运行脚本:

1
python parse.py

这将生成一个名为 output.md。使用 Markdown 预览器查看时,将显示如下内容:

亚马逊书页浏览器输出

简洁的 Markdown 格式使得 Perplexity AI 等工具更容易有效地处理内容,从而使它们能够专注于最相关的信息。

格式化AI提示

为了使 Perplexity AI 获得最佳效果,请提供清晰的指令(提示)。这些提示可以帮助 AI 理解您想要提取的内容。

以下是一个示例提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
提示 = [
{
“角色”: “系统”,
“内容”: “您是一位有用的助手,可以总结亚马逊产品书页。”
},
{
“角色”: “用户”,
“内容”
从 Markdown 中提取以下详细信息:\n”
“- 1 句话摘要\n”
“- 在网上搜索推荐阅读\n”
"- 价格\n\n"
f"Markdown:\n{markdown_content}\n\n”
“仅使用 JSON 格式的提取数据进行响应。”
),
},
]

这个提示指示人工智能究竟要从内容中提取什么内容。

提供给人工智能进行分析

现在,让我们使用与 OpenAI 兼容的 API 将此提示发送给 Perplexity AI:

保存到 perplexity_ai_powered_scraper.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
,来自进口
,来自 解析 进口 解析 HTML 到 Markdown 格式
,来自 openai 进口 OpenAI
进口 JSON

网址= “https://www.amazon.com/Art-War-DELUXE-Sun-Tzu/dp/9388369696/ref=sr_1_1”

html_content = 抓取(URL)
markdown_content = 解析html到markdown格式(html内容)

提示 = [
{
“角色”: “系统”,
“内容”: “您是一位有用的助手,可以总结亚马逊产品书页。”
},
{
“角色”: “用户”,
“内容”
从 Markdown 中提取以下详细信息:\n”
“- 1 句话摘要\n”
“- 在网上搜索推荐阅读\n”
"- 价格\n\n"
f"Markdown:\n{markdown_content}\n\n”
“仅使用 JSON 格式的提取数据进行响应。”
),
},
]

客户端=OpenAI(api_key=“ “,base_url=“https://api.perplexity.ai”)

# 发送聊天完成请求
响应=客户端.聊天.完成.创建(
模型=“声纳专业版”,
消息=提示,
)

# 以 JSON 格式导出结果
scraped_data = json.loads(response.choices[0].消息.内容)

打印(json.dumps(scraped_data, 缩进=2))

确保更换 <perplexity.ai API KEY> 使用先前的 API 密钥并使用以下命令运行代码。

1
python perplexity_ai_powered_scraper.py

这将输出一个 json 文本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
“1_sentence_summary”: 《孙子兵法》是孙子的一部古代中国军事论文,强调战略规划,了解自己和敌人,并使用适应性战术在冲突及其他方面取得胜利[1][3][4]。,
“推荐阅读”: [
《战争论》——卡尔·冯·克劳塞维茨,
《宫本武藏的五轮书》,
《孙子及其他大师的领导力与战略》(威廉·A·科恩著),
《罗伯特·格林的三十三种战争策略》,
《君主论》——尼科尔·马基雅维利
],
“价格”: [
{
“格式”: 《精装本(豪华精装版)》,
“价钱”: “ $ 15.80”
}
]
}

您可以在 GitHub上.

Perplexity AI 在网页抓取中的挑战与局限性

虽然 Perplexity AI 提供了强大的网页抓取功能,但也带来了一些挑战:

图片展示了 Perplexity AI 在网页抓取方面面临的挑战和局限性

了解这些限制有助于您最大限度地发挥 Perplexity AI 在网页抓取方面的优势,同时最大限度地减少潜在问题。

避免被阻止:使用 Crawlbase Smart AI Proxy

当使用 Perplexity AI 进行抓取时,网站通常会阻止机器人,这使得获取数据变得更具挑战性。 Crawlbase Smart AI Proxy 通过旋转 IP 地址和绕过 CAPTCHA 来解决这个问题,让您可以抓取网站而不会被阻止。

为何使用 Crawlbase Smart AI Proxy 与 Perplexity AI 合作?

  1. 绕过 IP 阻止:旋转 IP 地址以避免被发现。
  2. 绕过 CAPTCHA:自动处理 CAPTCHA,因此您不必亲自处理。
  3. 更短的行驶时间:无需管理代理服务器—Crawlbase 做这一切。
  4. 干净的HTML:返回可供 Perplexity AI 使用的 HTML。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
,来自 bs4 进口 美丽汤
,来自 markdownify 进口 markdownify as md
,来自 请求异常 进口 请求异常
,来自 urllib3.异常 进口 不安全请求警告
进口 要求

# 仅抑制来自 urllib3 的单个警告。
请求.包.urllib3.disable_warnings(类别=InsecureRequestWarning)

标头= {
'接受': '文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,图像/avif,图像/webp,图像/apng,*/*;q=0.8,应用程序/签名交换;v=b3;q=0.7',
'用户代理': “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/137.0.0.0 Safari/537.36”
}

DEF crawl_with_smart_proxy(网址)-> STR:
代理网址 = “http:// :@smartproxy.crawlbase.com:8012” # 使用 https:// 和端口 8013 实现 HTTPS
代理={
“http”:代理网址,
“https”:代理网址
}

尝试:
响应 = 请求.get(
网址,
标题=标题,
代理=代理,
验证=,
超时=30
)
响应.raise_for_status()

回报 响应文本

请求异常 as 错误:
打印(f"\n无法抓取网址'{网址}': {错误}\n")
提高

与 Crawlbase Smart AI Proxy,您可以安全地抓取网站,绕过阻止,并获取干净的数据以便使用 Perplexity AI 进行处理。

总结

利用 Perplexity AI 进行 Python 网页抓取,可以增强您的抓取任务,使其更快、更智能、更准确。通过将原始 HTML 转换为 Markdown 并利用 AI 提取结构化数据,您可以简化流程并节省时间。

然而,抓取网站内容可能颇具挑战性,尤其是在遇到拦截和验证码时。这就是 Crawlbase Smart AI Proxy 有了它,它可以帮助您避免 IP 封锁并绕过验证码,让您可以不间断地抓取网站数据。Perplexity AI 和 Crawlbase Smart AI Proxy 使网页抓取更加高效和可扩展,让您不受阻碍地获取所需的数据。

常見問題解答

问:什么是 Perplexity AI,它如何帮助进行网络抓取?

Perplexity AI 是一款利用自然语言处理技术从原始 HTML 内容中提取结构化数据的工具。它能够将杂乱的 HTML 转换为可读的 Markdown 格式,并利用 AI 技术提取关键细节,从而简化数据抓取工作。它不仅能节省您的时间,还能提高数据提取的准确性。

问:如何 Crawlbase Smart AI Proxy 防止我的刮板被堵塞?

Crawlbase Smart AI Proxy 轮换 IP 地址并绕过验证码,使浏览网站看起来像是真实用户。它有助于避免 IP 封锁,并让您在爬取网站时不会被检测为机器人程序。这是一款可靠的工具,可确保您的爬取任务持续运行。

问:我可以使用 Perplexity AI 和 Crawlbase Smart AI Proxy 在一起吗?

是的!使用 Perplexity AI 进行数据提取和 Crawlbase Smart AI Proxy 绕过阻止和 CAPTCHA 是一个杀手组合。 Crawlbase 实现无缝访问网站,Perplexity AI 促进数据清理和处理。