ScrapegraphAI:用 LLM 支持网络抓取

指南, 蟒蛇, 抓取, 9月27日-2024年5 分钟阅读

网络搜刮已经从简单的基于规则的提取发展到依靠大型语言模型(LLM)进行上下文感知数据提取的更先进技术。ScrapegraphAI走在这一演进的前沿,通过 OpenAI、Gemini 等强大的 LLM,甚至 Ollama 等本地模型实现网络搜刮。在本篇博客中,我们将深入探讨 ScrapegraphAI 是什么、如何工作,并通过一个实际示例介绍如何利用代理集成从网站上搜刮数据。

您将学到什么?

在本博客中,我们将介绍

  • 什么是 ScrapegraphAI 及其工作原理
  • ScrapegraphAI 用于网站搜索的基本用法
  • 如何整合代理服务器以提高性能
  • 使用 OpenAI 的 GPT-4o-mini 模型从Books to Scrape网站提取图书数据的实践示例

什么是 ScrapegraphAI 及其工作原理

ScrapegraphAI 是一个强大的网络搜刮框架(开源),它利用大型语言模型从网站中动态提取数据。与依赖僵化的 CSS 选择器或 XPath 的传统搜刮工具不同,ScrapegraphAI 使用 LLMs 来解释和提取各种来源的结构化数据,包括动态网页和 PDF 等文件。您只需指定所需的信息,让 ScrapeGraphAI 来完成繁重的工作,与传统的搜索工具相比,它提供了一种更灵活、维护成本更低的选择。ScrapegraphAI 的一个主要功能是让用户为想要提取的数据定义模式。您可以为输出指定一种结构化格式,ScrapegraphAI 会调整提取的数据,使其与该模式相匹配。

ScrapegraphAI 的突出特点之一是在选择 LLM 方面的灵活性,它支持

  • OpenAI 的 GPT 模型 ,如 GPT-3.5 和 GPT-4o-mini
  • 双子座 适用于更具体的用例
  • 使用 Ollama 的本地模式 ,提供具有成本效益的私人刮削解决方案

关键扫描管道

ScrapegraphAI 提供多种标准刮擦管道,以满足各种需求。其中最常见的包括

  • SmartScraperGraph:单页面刮板,只需用户提示和输入源(网站或本地文件)。
  • SearchGraph:从搜索引擎排名前 n 位的搜索结果中提取信息。
  • SpeechGraph:从页面中抓取数据,并根据结果生成音频文件。
  • ScriptCreatorGraph:抓取单个页面并生成 Python 脚本,以便今后提取。
  • SmartScraperMultiGraph:使用单个提示和 URL 列表从多个页面抓取数据。
  • ScriptCreatorMultiGraph:与前一个类似,但生成的 Python 脚本可用于多页面搜索。

在下一节中,我们将重点介绍SmartScraperGraph,它只需提供提示和源 URL 即可进行单页面刮擦。

ScrapegraphAI 的基本用法

先决条件

要跟上进度,您需要安装一些依赖项。运行以下命令即可:

pipinstallscrapegraphai openai python-dotenv
playwright安装
  • scrapegraphai:这是 ScrapegraphAI 的核心软件包。
  • openai:我们将使用 OpenAI 的 GPT-4o-mini 模型进行刮擦。
  • python-dotenv:这将使我们能够从 .env 文件中安全地加载环境变量(如 API 密钥)。

安装完成后,请确保您已准备好OpenAI API 密钥。将其保存在 .env 文件中,以确保凭据安全:

OPENAI_APIKEY=your_openai_api_key

代码示例:从图书中抓取数据到抓取

假设我们想提取 Books to Scrape 上所有书籍的信息,包括

  • 书名
  • 价格
  • 可用性
  • 评论

下面是一个使用 ScrapegraphAI 的SmartScraperGraph 管道的代码示例:

import os
from dotenv import load_dotenv
from scrapegraphai.graphs import SmartScraperGraph

# Load the OpenAI API key from .env file
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY")

# Define configuration for the LLM
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "openai/gpt-4o-mini",
   },
}

prompt = """
Extract all the books from this website including
- Book Name
- Price
- Availability 
- Reviews
"""

# Create the SmartScraperGraph instance
smart_scraper_graph = SmartScraperGraph(
   prompt=prompt,
   source="https://books.toscrape.com/",
   config=graph_config
)


if __name__ == '__main__':
   result = smart_scraper_graph.run()
   print(result)

守则解释:

  • LLM 配置:我们将 ScrapegraphAI 配置为使用 OpenAI 的 GPT-4o-mini 提供 API 密钥并指定模型名称,就可以创建模型。
  • 提示:用户定义的提示指示人工智能从网站上提取每本书的信息,包括名称、价格、可用性和评论。
  • 源 URL:我们提供要抓取的网站 URL。
  • 运行刮刀:""""""""""""等字样。 运行() 方法开始搜索过程,搜索结果将以字典列表的形式打印出来,每个字典包含一本书的详细信息。

输出示例

下面是输出结果的示例:

{'Book Name': 'A Light in the Attic', 'Price': '£51.77', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Tipping the Velvet', 'Price': '£53.74', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Soumission', 'Price': '£50.10', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Sharp Objects', 'Price': '£47.82', 'Availability': 'In stock', 'Reviews': 'NA'},
# ... more books ...

正如您所看到的,刮板成功地以结构化格式获取了每本书的详细信息,可在数据管道中使用。

代理集成

在进行大规模搜刮或针对有反搜刮措施的网站进行搜刮时,集成代理对避免 IP 禁止、验证码和速率限制至关重要。使用代理不仅能提供匿名性,还能确保您不间断地抓取大量数据。

最好的选择之一就是住宅代理,因为它们来自真实的住宅 IP 地址,因此更难被发现和拦截。

住宅代理服务器ProxyScrape是网络搜索的理想选择,尤其是在针对有严格反搜索措施的网站时。我们提供来自不同地点的旋转 IP 地址,确保您的请求看起来像是来自真实用户。这有助于绕过限制、规避禁令,并确保持续访问您需要的数据。

现在让我们看看代理如何与 ScrapegraphAI 集成:

from dotenv import load_dotenv
import os
from scrapegraphai.graphs import SmartScraperGraph

# Load the OpenAI API key from .env file
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY")

# Define the configuration with proxy integration
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "openai/gpt-4o-mini",
   },
   "loader_kwargs": {
      "proxy": {
         "server": "rp.proxyscrape.com:6060",
         "username": "your_username",
         "password": "your_password",
      },
   },
}

prompt = """
Extract all the books from this website including
- Book Name
- Price
- Availability 
- Reviews
"""

# Create the SmartScraperGraph instance
smart_scraper_graph = SmartScraperGraph(
   prompt=prompt,
   source="https://books.toscrape.com/",
   config=graph_config
)

# Run the scraper and print the result
if __name__ == '__main__':
   result = smart_scraper_graph.run()
   print(result)

代理整合说明:

  • 代理配置:代理设置在 loader_kwargs 键中的 graph_config.在这里,您可以定义代理服务器地址、用户名和密码。
  • 这可确保 ScrapegraphAI 发出的所有请求都通过指定的代理服务器路由,从而有助于绕过限制或避免目标网站上的 IP 禁止。

结论

在这篇博客中,我们探讨了ScrapegraphAI 的强大功能,它是一种现代网络搜刮工具,使用大型语言模型 (LLM) 智能地从网站中提取结构化数据。我们介绍了它的主要功能,包括SmartScraperGraph 等各种刮擦管道,并提供了一个使用 OpenAI 的GPT-4o-mini模型从网站上刮擦书籍数据的实际示例。

此外,我们还展示了如何集成代理服务器,尤其是ProxyScrape 的住宅代理服务器。代理对于保持匿名、绕过限制和保持数据访问至关重要,尤其是对于使用 IP 禁止或速率限制等反搜索策略的网站。

通过集成ProxyScrape 的住宅代理,您可以确保您的网络搜索活动更加高效、安全和可扩展,即使在最具挑战性的网站上也是如此。