Skip to main content
Open In ColabOpen on GitHub

Hyperbrowser 网页抓取工具

Hyperbrowser 是一个用于运行和扩展无头浏览器的平台。它允许您大规模启动和管理浏览器会话,并提供易于使用的解决方案以满足任何网页抓取需求,例如抓取单个页面或爬取整个网站。

关键特性:

  • 即时可扩展性 - 在几秒钟内启动数百个浏览器会话,无需基础设施方面的烦恼
  • 简单集成 - 与 Puppeteer 和 Playwright 等流行工具无缝协作
  • 强大的 API - 易于使用的 API,用于抓取/爬取任何网站,以及更多功能
  • 绕过反机器人措施 - 内置隐身模式、广告拦截、自动验证码解决和代理轮换

这个笔记本提供了一个快速概览,帮助您开始使用Hyperbrowser网络工具。

有关 Hyperbrowser 的更多信息,请访问 Hyperbrowser 网站,或者如果您想查看文档,可以访问 Hyperbrowser 文档

Key Capabilities

提取

Hyperbrowser 提供了强大的抓取能力,允许您从任何网页提取数据。抓取工具可以将网络内容转换为结构化的格式,如markdown或HTML,使数据的处理和分析更加容易。

爬取

爬取功能可以自动导航访问网站的多页内容。您可以设置参数,如页面限制来控制爬虫对站点的探索程度,在访问的每一页上收集数据。

提取

Hyperbrowser的提取能力利用AI从网页中抽取符合您定义模式的具体信息。这使得您可以将未结构化的网络内容转换为满足您精确要求的结构化数据。

概览

集成细节

工具本地序列化JS支持
Crawl Toollangchain-hyperbrowser
Scrape Toollangchain-hyperbrowser
Extract Toollangchain-hyperbrowser

设置

要访问Hyper浏览器Web工具,您需要安装langchain-hyperbrowser集成包,并创建一个Hyper浏览器账户并获取API密钥。

Credentials

前往 Hyperbrowser 注册并生成API密钥。完成这些步骤后,请设置HYPERBROWSER_API_KEY环境变量:

export HYPERBROWSER_API_KEY=<your-api-key>

安装

安装 langchain-hyperbrowser

%pip install -qU langchain-hyperbrowser

Instantiation

爬取工具

The HyperbrowserCrawlTool 是一个强大的工具,可以从给定的 URL 开始抓取整个网站。它支持可配置的页面限制和抓取选项。

from langchain_hyperbrowser import HyperbrowserCrawlTool
tool = HyperbrowserCrawlTool()

抓取工具

The HyperbrowserScrapeTool 是一个可以从网页中抓取内容的工具。它支持 Markdown 和 HTML 输出格式,以及元数据提取。

from langchain_hyperbrowser import HyperbrowserScrapeTool
tool = HyperbrowserScrapeTool()

提取工具

HyperbrowserExtractTool 是一个强大的工具,利用人工智能从网页中提取结构化数据。它能够根据预定义的模式提取信息。

from langchain_hyperbrowser import HyperbrowserExtractTool
tool = HyperbrowserExtractTool()

Invocation

基本用法

爬取工具

from langchain_hyperbrowser import HyperbrowserCrawlTool

result = HyperbrowserCrawlTool().invoke(
{
"url": "https://example.com",
"max_pages": 2,
"scrape_options": {"formats": ["markdown"]},
}
)
print(result)
{'data': [CrawledPage(metadata={'url': 'https://www.example.com/', 'title': 'Example Domain', 'viewport': 'width=device-width, initial-scale=1', 'sourceURL': 'https://example.com'}, html=None, markdown='Example Domain\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this\ndomain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)', links=None, screenshot=None, url='https://example.com', status='completed', error=None)], 'error': None}

抓取工具

from langchain_hyperbrowser import HyperbrowserScrapeTool

result = HyperbrowserScrapeTool().invoke(
{"url": "https://example.com", "scrape_options": {"formats": ["markdown"]}}
)
print(result)
{'data': ScrapeJobData(metadata={'url': 'https://www.example.com/', 'title': 'Example Domain', 'viewport': 'width=device-width, initial-scale=1', 'sourceURL': 'https://example.com'}, html=None, markdown='Example Domain\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this\ndomain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)', links=None, screenshot=None), 'error': None}

提取工具

from langchain_hyperbrowser import HyperbrowserExtractTool
from pydantic import BaseModel


class SimpleExtractionModel(BaseModel):
title: str


result = HyperbrowserExtractTool().invoke(
{
"url": "https://example.com",
"schema": SimpleExtractionModel,
}
)
print(result)
{'data': {'title': 'Example Domain'}, 'error': None}

自定义选项

Crawl Tool with Custom Options

result = HyperbrowserCrawlTool().run(
{
"url": "https://example.com",
"max_pages": 2,
"scrape_options": {
"formats": ["markdown", "html"],
},
"session_options": {"use_proxy": True, "solve_captchas": True},
}
)
print(result)
{'data': [CrawledPage(metadata={'url': 'https://www.example.com/', 'title': 'Example Domain', 'viewport': 'width=device-width, initial-scale=1', 'sourceURL': 'https://example.com'}, html=None, markdown='Example Domain\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this\ndomain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)', links=None, screenshot=None, url='https://example.com', status='completed', error=None)], 'error': None}

自定义选项的抓取工具

result = HyperbrowserScrapeTool().run(
{
"url": "https://example.com",
"scrape_options": {
"formats": ["markdown", "html"],
},
"session_options": {"use_proxy": True, "solve_captchas": True},
}
)
print(result)
{'data': ScrapeJobData(metadata={'url': 'https://www.example.com/', 'title': 'Example Domain', 'viewport': 'width=device-width, initial-scale=1', 'sourceURL': 'https://example.com'}, html='<html><head>\n    <title>Example Domain</title>\n\n    <meta charset="utf-8">\n    <meta http-equiv="Content-type" content="text/html; charset=utf-8">\n    <meta name="viewport" content="width=device-width, initial-scale=1">\n        \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.</p>\n    <p><a href="https://www.iana.org/domains/example">More information...</a></p>\n</div>\n\n\n</body></html>', markdown='Example Domain\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this\ndomain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)', links=None, screenshot=None), 'error': None}

提取工具(自定义模式)

from typing import List

from pydantic import BaseModel


class ProductSchema(BaseModel):
title: str
price: float


class ProductsSchema(BaseModel):
products: List[ProductSchema]


result = HyperbrowserExtractTool().run(
{
"url": "https://dummyjson.com/products?limit=10",
"schema": ProductsSchema,
"session_options": {"session_options": {"use_proxy": True}},
}
)
print(result)
{'data': {'products': [{'price': 9.99, 'title': 'Essence Mascara Lash Princess'}, {'price': 19.99, 'title': 'Eyeshadow Palette with Mirror'}, {'price': 14.99, 'title': 'Powder Canister'}, {'price': 12.99, 'title': 'Red Lipstick'}, {'price': 8.99, 'title': 'Red Nail Polish'}, {'price': 49.99, 'title': 'Calvin Klein CK One'}, {'price': 129.99, 'title': 'Chanel Coco Noir Eau De'}, {'price': 89.99, 'title': "Dior J'adore"}, {'price': 69.99, 'title': 'Dolce Shine Eau de'}, {'price': 79.99, 'title': 'Gucci Bloom Eau de'}]}, 'error': None}

Async Usage

所有工具支持异步使用:

from typing import List

from langchain_hyperbrowser import (
HyperbrowserCrawlTool,
HyperbrowserExtractTool,
HyperbrowserScrapeTool,
)
from pydantic import BaseModel


class ExtractionSchema(BaseModel):
popular_library_name: List[str]


async def web_operations():
# Crawl
crawl_tool = HyperbrowserCrawlTool()
crawl_result = await crawl_tool.arun(
{
"url": "https://example.com",
"max_pages": 5,
"scrape_options": {"formats": ["markdown"]},
}
)

# Scrape
scrape_tool = HyperbrowserScrapeTool()
scrape_result = await scrape_tool.arun(
{"url": "https://example.com", "scrape_options": {"formats": ["markdown"]}}
)

# Extract
extract_tool = HyperbrowserExtractTool()
extract_result = await extract_tool.arun(
{
"url": "https://npmjs.com",
"schema": ExtractionSchema,
}
)

return crawl_result, scrape_result, extract_result


results = await web_operations()
print(results)
---------------------------------------------------------------------------
``````output
NameError Traceback (most recent call last)
``````output
Cell In[6], line 10
1 from langchain_hyperbrowser import (
2 HyperbrowserCrawlTool,
3 HyperbrowserExtractTool,
4 HyperbrowserScrapeTool,
5 )
7 from pydantic import BaseModel
---> 10 class ExtractionSchema(BaseModel):
11 popular_library_name: List[str]
14 async def web_operations():
15 # Crawl
``````output
Cell In[6], line 11, in ExtractionSchema()
10 class ExtractionSchema(BaseModel):
---> 11 popular_library_name: List[str]
``````output
NameError: name 'List' is not defined

使用于代理

以下是使用代理中任何网页工具的方法:

from langchain_hyperbrowser import HyperbrowserCrawlTool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

# Initialize the crawl tool
crawl_tool = HyperbrowserCrawlTool()

# Create the agent with the crawl tool
llm = ChatOpenAI(temperature=0)

agent = create_react_agent(llm, [crawl_tool])
user_input = "Crawl https://example.com and get content from up to 5 pages"
for step in agent.stream(
{"messages": user_input},
stream_mode="values",
):
step["messages"][-1].pretty_print()
================================ Human Message =================================

Crawl https://example.com and get content from up to 5 pages
================================== Ai Message ==================================
Tool Calls:
hyperbrowser_crawl_data (call_G2ofdHOqjdnJUZu4hhbuga58)
Call ID: call_G2ofdHOqjdnJUZu4hhbuga58
Args:
url: https://example.com
max_pages: 5
scrape_options: {'formats': ['markdown']}
================================= Tool Message =================================
Name: hyperbrowser_crawl_data

{'data': [CrawledPage(metadata={'url': 'https://www.example.com/', 'title': 'Example Domain', 'viewport': 'width=device-width, initial-scale=1', 'sourceURL': 'https://example.com'}, html=None, markdown='Example Domain\n\n# Example Domain\n\nThis domain is for use in illustrative examples in documents. You may use this\ndomain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)', links=None, screenshot=None, url='https://example.com', status='completed', error=None)], 'error': None}
================================== Ai Message ==================================

I have crawled the website [https://example.com](https://example.com) and retrieved content from the first page. Here is the content in markdown format:

\`\`\`
Example Domain

# Example Domain

This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.

[More information...](https://www.iana.org/domains/example)
\`\`\`

If you would like to crawl more pages or need additional information, please let me know!

配置选项

共通选项

所有工具都支持这些基本配置选项:

  • url: 需要处理的URL
  • session_options: 浏览器会话配置
    • use_proxy: 是否使用代理
    • solve_captchas: 是否自动解决验证码
    • accept_cookies: 是否接受cookie

Tool-Specific Options

爬取工具

  • max_pages: 最大爬取页面数
  • scrape_options: 每个页面抓取选项
    • formats: 输出格式列表 (markdown, html)

抓取工具

  • scrape_options: 选项用于抓取页面
    • formats: 输出格式列表(markdown, html)

提取工具

  • schema: Pydantic 模型定义了要提取的结构
  • extraction_prompt: 自然语言提示以进行提取

对于更多详细信息,请参阅相应的API参考:

API 参考