GPT 智能网页爬虫库
实验性库利用 GPT API 智能解析网页内容,比传统爬虫更灵活且易维护。
实验性库利用 GPT API 智能解析网页内容,比传统爬虫更灵活且易维护。
scrapeghost 是一个用于使用 OpenAI 的 GPT 从网站获取数据的实验性库。
该库提供了一种从 HTML 中获取结构化数据的方法,无需编写特定于页面的代码。
在继续之前,这里有至少三个你不应该使用这个库的原因:
该库高度实验性,对 API 的稳定性或结果的准确性不做任何保证。
该库高度实验性,对 API 的稳定性或结果的准确性不做任何保证。
它依赖于 OpenAI API,该 API 速度相当慢且成本可能很高。(使用该库前请查看成本。)
它依赖于 OpenAI API,该 API 速度相当慢且成本可能很高。(使用该库前请查看成本。)
目前在 Hippocratic License 3.0 下许可。(见常见问题。)
目前在 Hippocratic License 3.0 下许可。(见常见问题。)
风险自担。
第 1 步) 获得一个 OpenAI API 密钥(https://platform.openai.com)并设置一个环境变量:
export OPENAI_API_KEY=sk-...
第 2 步) 以你喜欢的方式安装该库:
pip install scrapeghost
poetry add scrapeghost
第 3 步) 通过定义要提取的数据的形状来实例化一个 SchemaScraper:
from scrapeghost import SchemaScraper
scrape_legislators = SchemaScraper(
schema={
"name": "string",
"url": "url",
"district": "string",
"party": "string",
"photo_url": "url",
"offices": [{"name": "string", "address": "string", "phone": "string"}],
}
)
模式没有预定义的格式,GPT 模型在理解你想要什么方面做得很好,你可以使用任何值来提供提示。
第 4 步) 将 URL(或 HTML)传递给生成的 scraper 将返回抓取的数据:
resp = scrape_legislators("https://www.ilga.gov/house/rep.asp?MemberID=3071")
resp.data
{"name": "Emanuel 'Chris' Welch",
"url": "https://www.ilga.gov/house/Rep.asp?MemberID=3071",
"district": "7th", "party": "D",
"photo_url": "https://www.ilga.gov/images/members/{5D419B94-66B4-4F3B-86F1-BFF37B3FA55C}.jpg",
"offices": [
{"name": "Springfield Office",
"address": "300 Capitol Building, Springfield, IL 62706",
"phone": "(217) 782-5350"},
{"name": "District Office",
"address": "10055 W. Roosevelt Rd., Suite E, Westchester, IL 60154",
"phone": "(708) 450-1000"}
]}
查看教程获取分步指南来构建一个 scraper。
如果你已经安装了该包(例如用 pipx),你可以使用 scrapeghost 命令行工具来试验。
#!/bin/sh
scrapeghost https://www.ncleg.gov/Members/Biography/S/436 \
--schema "{'first_name': 'str', 'last_name': 'str',
'photo_url': 'url', 'offices': [] }'" \
--css div.card | python -m json.tool
{
"first_name": "Gale",
"last_name": "Adcock",
"photo_url": "https://www.ncleg.gov/Members/MemberImage/S/436/Low",
"offices": [
{
"type": "Mailing",
"address": "16 West Jones Street, Rm. 1104, Raleigh, NC 27601"
},
{
"type": "Office Phone",
"phone": "(919) 715-3036"
}
]
}
更多详情见 CLI 文档。
该库的目的是为使用 GPT 探索网络爬虫提供一个便利的接口。
尽管大部分工作由 GPT 模型完成,但 scrapeghost 提供了许多功能使其更易使用。
Python 模式定义 - 将你想要提取的数据的形状定义为任何 Python 对象,可以提供尽可能多或尽可能少的细节。
HTML 清理 - 删除不必要的 HTML,以减少 API 请求的大小和成本。
CSS 和 XPath 选择器 - 通过编写单个 CSS 或 XPath 选择器来预过滤 HTML。
自动分割 - 可选地将 HTML 分割为多个模型调用,允许爬取更大的页面。
JSON 验证 - 确保响应是有效的 JSON。(如果不是有效的,可以选择将其发回给 GPT 进行修复。)
模式验证 - 更进一步,使用 pydantic 模式来验证响应。
幻觉检查 - 响应中的数据是否真的存在于页面上?
成本追踪 - Scrapers 保持运行总计发送和接收的 token 数,以便可以追踪成本。
自动回退支持 - 例如默认使用成本节省的 GPT-3.5-Turbo,如果需要则回退到 GPT-4。
预算设置 - 允许设置预算,如果超过预算则停止 scraper。