在传统网络爬虫中,主要的挑战一直是手动操作的工作量。使用像 Beautiful Soup(BS4)和 Selenium 这样的工具时,我们需要为每个新网站编写解析代码,需要适配和适应不同的 HTML 结构。这种不断的修改既耗时又容易出错。然而,当出现了大模型之后就没那么复杂了。随着具备视觉功能的大型语言模型(LLM)的出现,我们现在可以创建几乎通用的网络爬虫代理,大大简化和自动化了这一过程。
在这篇博客中,我们的主要关注点是探讨三种强大的工具:ScrapeGraph、FireCrawl 和 AgentQL。这些创新的库在革命性地改变网络爬虫领域方面发挥了关键作用,提供了先进的功能,使我们能够创建高效且多功能的爬虫代理。通过深入的讨论和实际示例,我们将详细探讨这些工具如何简化网络爬虫过程,并实现构建由 LLM 模型驱动的爬虫代理的目标。
ScrapeGraph
ScrapeGraphAI 是一个开源框架,它利用大型语言模型(LLM)和直接图逻辑的力量来简化网络爬虫过程。使用 ScrapeGraphAI,为网站、文档和 XML 文件创建爬虫管道变得轻而易举。你只需指定要提取的信息,其余的工作由库来处理。其直观的界面和先进的功能使其成为开发人员寻求高效、精确的网络爬虫解决方案时的首选。
import os
from dotenv import load_dotenv
from scrapegraphai.graphs import SmartScraperGraph
from scrapegraphai.utils import prettify_exec_info
import json
# 从.env加载环境变量
load_dotenv()
# 从环境变量加载openai key
openai_key = os.getenv("OPENAI_APIKEY")
# 配置SmartScraperGraph
graph_config = {
"llm": {
"api_key": openai_key,
"model": "gpt-3.5-turbo",
},
}
# 创建SmartScraperGraph并运行
smart_scraper_graph = SmartScraperGraph(
prompt="列举所有的产品和他们的价格",
# 接收一个html网页页面
source="https://s.taobao.com/search?page=1&q=iphone",
config=graph_config
)
# 执行爬虫并保存结果
result = smart_scraper_graph.run()
with open("results.json", 'w', encoding='utf-8') as f:
json.dump(result, f, indent=4)
我们导入了必要的模块和库,如 os、dotenv、SmartScraperGraph 和 json。首先,我们从 .env 文件中加载环境变量,这是安全存储像 API 密钥等敏感信息的常见做法。graph_config 字典包含 SmartScraperGraph 所需的配置设置。在本例中,它包含 OpenAI API 密钥并指定使用的 GPT 模型(gpt-3.5-turbo)。接下来,我们创建 SmartScraperGraph 类的实例,向其提供提示(查询)、源(要爬取的网页 URL)和配置设置。在 smart_scraper_graph 实例上调用 run() 方法来执行爬虫并从网页中提取数据。提取的数据存储在 result 变量中。最后,使用 json.dump() 方法将提取的数据保存到名为 “results.json” 的 JSON 文件中,供进一步处理或分析。
{
"products": [
{
"Name": "Apple/苹果 iPhone 13 Pro Max苹果13promax 苹果13 pro 手机",
"Price": "¥3238.00"
},
{
"Name": "新款Apple/苹果 iPhone 15 Pro Max 苹果5G手机15ProMax 国行正品",
"Price": "¥7428.00"
},
{
"Name": "Apple/苹果 iPhone 15 支持移动联通电信5G 双卡双待手机",
"Price": "¥6999.00"
},
{
"Name": "Apple/苹果 iPhone14ProMax双卡原装正品苹果14Promax全网通全新",
"Price": "¥5999.00"
},
{
"Name": "Apple/苹果 iPhone 15 Pro Max",
"Price": "¥9999.00"
}
]
}
如果你想从不同的来源爬取数据,只需在代码中更改 URL。SmartScraperGraph 的灵活性允许你在不显著修改代码的情况下,针对各种网站或网页。这意味着你可以根据具体需求调整爬虫过程,轻松从各种来源收集数据。虽然 SmartScraperGraph 在处理某些网站的弹出窗口或拦截器时可能遇到限制,但需要注意的是,SmartScraperGraph 是一个开源库,这意味着你可以根据具体要求对其进行定制。
FireCrawl
Firecrawl 作为一个强大的解决方案,配备了一系列功能,旨在克服网络爬虫工作中的固有挑战。它高效地管理代理、缓存、速率限制等复杂性,确保数据检索过程的顺畅。Firecrawl 的爬取能力扩展到网站的所有可访问子页面,无论是否存在站点地图,保证全面的数据提取。即使面对通过 JavaScript 动态渲染的内容,Firecrawl 也能非常高效的地捕获每一条有价值的信息。其输出经过 Markdown 格式化,简化了与大型语言模型(LLM)和其他应用程序的集成。
你可以注册 Firecrawl 的免费套餐,获得基本的爬虫功能。通过在这注册,你可以爬取最多 500 个页面,限制为每分钟 5 次爬取以及 1 个并发爬取任务。
下面是一个使用FireCrawl爬取
from firecrawl imp