CrewAI + Scrapeless: Cung cấp dữ liệu web trực tiếp cho đại lý của bạn.
Lead Scraping Automation Engineer
Một đội CrewAI chỉ hữu ích bằng các công cụ mà các tác nhân của nó có thể tiếp cận. Cho một tác nhân nghiên cứu chỉ một mô hình ngôn ngữ, nó sẽ tự tin mô tả một trang mà nó chưa bao giờ mở.
Kết nối đội đó với Máy chủ MCP Scrapeless sửa chữa phần đầu vào: các tác nhân có quyền kiểm soát trình duyệt, trích xuất trang, tìm kiếm Google và xu hướng Google như các công cụ CrewAI thông thường, trong khi việc xử lý, định tuyến proxy và chống phát hiện vẫn diễn ra trên máy chủ. Hướng dẫn này sẽ chạy kết nối từ đầu đến cuối và trình bày danh sách công cụ, các sơ đồ đối số, và mã markdown mà một cuộc gọi thực tế trả về.
Những Gì Thiết Lập Này Cung Cấp Cho Đội Của Bạn
Các tác nhân của bạn nhận được 21 công cụ có thể gọi từ một kết nối. Máy chủ MCP Scrapeless cung cấp chúng qua HTTP có thể phát trực tuyến, và crewai-tools biến mỗi công cụ thành một BaseTool tiêu chuẩn của CrewAI mà bất kỳ tác nhân nào cũng có thể giữ.
Các công cụ phân thành ba nhóm:
- Truy xuất trang —
scrape_markdown,scrape_html, vàscrape_screenshotlấy một URL và trả về nó dưới hình thức bạn yêu cầu. - Kiểm soát trình duyệt trực tiếp — mười sáu công cụ
browser_*tạo một phiên và sau đó nhấp, gõ, cuộn, điều hướng, chờ đợi và chụp ảnh bên trong nó. - Bề mặt tìm kiếm —
google_searchvàgoogle_trends.
Bởi vì công việc diễn ra ở phía máy chủ, quy trình đội ngũ vẫn nhỏ. Không có trình duyệt cục bộ để cài đặt, không có hồ bơi proxy để quản lý, và không có phiên bản trình điều khiển nào cần phải đồng bộ với bản phát hành Chrome.
Tại Sao Chọn Máy Chủ MCP Scrapeless
Đặc tả Giao thức Ngữ cảnh Mô hình định nghĩa cách mà một khách hàng khám phá và gọi các công cụ trên một máy chủ, điều này làm cho một kết nối đáng giá hơn là một lớp bọc viết tay: danh sách công cụ, sơ đồ đối số, và phong bì kết quả đều đến từ máy chủ thay vì được mã cứng trong dự án của bạn. Các cuộc gọi được thực hiện dưới dạng các tin nhắn JSON-RPC 2.0, vì vậy định dạng yêu cầu và phản hồi là một tiêu chuẩn đã công bố thay vì một quy ước của nhà cung cấp.
Scrapeless công bố một điểm cuối được lưu trữ, vì vậy không cần phải chạy máy chủ. Phương tiện truyền tải là HTTP có thể phát trực tuyến, cơ chế HTTP của giao thức, và xác thực là một tiêu đề duy nhất. Mọi thứ mà một tác nhân CrewAI cần chỉ là một từ điển. Cùng một khóa cũng hỗ trợ Trình duyệt Trích xuất Scrapeless, là trình duyệt đám mây mà các công cụ browser_* điều khiển, và tham số tham chiếu cho mỗi công cụ nằm trong tài liệu Scrapeless.
Điều Kiện Tiên Quyết
- Python 3.10 trở lên. Cả
crewaivàcrewai-toolshiện đang khai báo>=3.10,<3.14. - Một khóa API Scrapeless từ bảng điều khiển.
- Một khóa nhà cung cấp mô hình cho bất kỳ LLM nào mà đội của bạn đang chạy. CrewAI mặc định là OpenAI và đọc
OPENAI_API_KEY.
Lưu ý: Các ví dụ dưới đây được thực hiện với khóa Scrapeless nhưng không có khóa nhà cung cấp mô hình. Kết nối MCP, khám phá công cụ, sơ đồ đối số, gọi công cụ và gắn kết tác nhân đều chạy trực tiếp. Cuộc gọi cuối cùng
crew.kickoff()là một khoảng cách tiên quyết — nó cần một khóa mô hình, và bài viết đánh dấu bước đó thay vì hiển thị kết quả tưởng tượng.
Cài Đặt
bash
pip install "crewai==1.15.4" "crewai-tools[mcp]==1.15.4"
Phần [mcp] kéo vào thư viện khách hàng mcp và mcpadapt, là lớp chuyển đổi định nghĩa công cụ MCP thành các công cụ bản địa của framework.
Nếu môi trường của bạn đã có một ngăn xếp OpenTelemetry, hãy cài đặt hai gói đó cùng nhau như đã trình bày thay vì từng cái một. crewai định vị opentelemetry-sdk~=1.42, và một tập hợp xuất khẩu đã nâng cấp một phần gây ra lỗi nhập trước khi bất kỳ mã nào của bạn chạy.
Đặt khóa trong shell của bạn:
bash
export SCRAPELESS_API_KEY="your_api_key_here"
Kết Nối Qua HTTP Có Thể Phát Trực Tuyến
MCPServerAdapter nhận một từ điển mô tả máy chủ. Mục headers mang khóa API Scrapeless:
python
import os
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params) as tools:
names = sorted(t.name for t in tools)
print(f"số lượng công cụ: {len(names)}")
for n in names:
print(" -", n)
Chạy nó sẽ liệt kê những gì máy chủ thực sự cung cấp:
text
số lượng công cụ: 21
- browser_click
- browser_close
- browser_create
- browser_get_html
- browser_get_text
- browser_go_back
- browser_go_forward
- browser_goto
- browser_press_key
- browser_screenshot
- browser_scroll
- browser_scroll_to
- browser_snapshot
- browser_type
- browser_wait
- browser_wait_for
- google_search
- google_trends
- scrape_html
- scrape_markdown
- scrape_screenshot
Hai chi tiết đáng chú ý. Tên gọi là phẳng - không có tiền tố máy chủ hoặc tên miền phân cách, vì vậy scrape_markdown là chuỗi văn bản mà một tác nhân sẽ gọi. Và bộ quản lý ngữ cảnh rất quan trọng: nó mở phiên khi vào và đóng lại khi ra, đó là lý do tại sao bộ điều hợp được viết dưới dạng một khối with thay vì một bộ khởi tạo đơn giản.
Cung cấp cho Tác Nhân Chỉ Những Công Cụ Cần Thiết
Việc giao tất cả 21 công cụ cho mọi tác nhân làm cho công việc của mô hình trở nên khó khăn hơn, không dễ dàng hơn. MCPServerAdapter chấp nhận các tên công cụ sau từ điển máy chủ và chỉ trả về những công cụ đó:
python
import os
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params, "scrape_markdown", "google_search") as tools:
print("các công cụ đã lọc:", [t.name for t in tools])
for t in tools:
schema = getattr(t, "args_schema", None)
fields = list(schema.model_fields) if schema else "không có"
print(f" {t.name} args: {fields}")
text
các công cụ đã lọc: ['scrape_markdown', 'google_search']
scrape_markdown args: ['url']
google_search args: ['q', 'hl', 'gl']
Các sơ đồ tham số đến từ máy chủ, vì vậy chúng là hợp đồng thực tế: scrape_markdown nhận một url đơn lẻ, và google_search nhận một truy vấn cùng với mã ngôn ngữ và quốc gia. Một tác nhân nghiên cứu chỉ cần đọc các trang và thực hiện tìm kiếm sẽ nhận được đúng hai công cụ và không có bề mặt phiên trình duyệt để lạm dụng.
Sẵn sàng để kết nối điều này vào đội ngũ của bạn chưa? Tạo một tài khoản Scrapeless miễn phí và kết nối với khóa từ bảng điều khiển của bạn.
Gắn Kết Các Công Cụ Với Một Đội Ngũ
Các công cụ được đưa trực tiếp vào bộ khởi tạo Agent, và tác nhân sẽ vào một Crew với nhiệm vụ của mình:
python
import os
from crewai import Agent, Task, Crew
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params, "scrape_markdown", "google_search") as tools:
analyst = Agent(
role="Nhà Phân Tích Nghiên Cứu Web",
goal="Biến các trang công khai thành markdown sạch cho phân tích phía sau.",
backstory="Làm việc với các nguồn web công khai và trả lại ghi chú có cấu trúc.",
tools=tools,
verbose=False,
)
print("công cụ của tác nhân:", [t.name for t in analyst.tools])
task = Task(
description="Lấy https://quotes.toscrape.com/js/ và tóm tắt các tác giả có mặt.",
expected_output="Danh sách tên tác giả được tìm thấy trên trang.",
agent=analyst,
)
crew = Crew(agents=[analyst], tasks=[task], verbose=False)
print("đội ngũ tác nhân:", len(crew.agents), "| nhiệm vụ đội ngũ:", len(crew.tasks))
text
công cụ của tác nhân: ['scrape_markdown', 'google_search']
đội ngũ tác nhân: 1 | nhiệm vụ đội ngũ: 1
Tác nhân nắm giữ cả công cụ do máy chủ cung cấp và đội ngũ đã được tập hợp. Mọi thứ cho đến điểm này chỉ chạy trên khóa Scrapeless.
Lưu ý:
crew.kickoff()là một bước dưới cần một khóa cung cấp mô hình. Nếu không cóOPENAI_API_KEYđược thiết lập, CrewAI sẽ phát sinhValueError: OPENAI_API_KEY là cần thiếttrước cuộc gọi mô hình đầu tiên, do đó quá trình chạy được hiển thị như dòng bạn thêm vào thay vì đầu ra được ghi lại.
python
result = crew.kickoff()
print(result)
Kết Quả Của Một Cuộc Gọi Công Cụ
Gọi một công cụ trực tiếp là cách nhanh nhất để xem hình dạng trả về mà không tốn tín hiệu mô hình. scrape_markdown nhận URL và trả lại markdown:
python
import os
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params, "scrape_markdown") as tools:
tool = list(tools)[0]
md = tool.run(url="https://quotes.toscrape.com/js/")
text = md if isinstance(md, str) else str(md)
print("ký tự markdown:", len(text))
print("chứa Einstein:", "Einstein" in text)
print("180 ký tự đầu tiên:", text[:180].replace("\n", " "))
text
ký tự markdown: 1580
chứa Einstein: True
180 ký tự đầu tiên: Phản hồi: "# [Quotes to Scrape](https://quotes.toscrape.com/)\n\n[Đăng nhập](https://quotes.toscrape.com/login)\n\n“Thế giới như chúng ta đã tạo ra là một quá trình suy nghĩ của chúng ta. Nó ca
Trang mục tiêu xây dựng danh sách trích dẫn của nó trong trình duyệt thay vì gửi nó trong HTML ban đầu, và các trích dẫn vẫn có mặt trong markdown - máy chủ đã trình bày trang trước khi chuyển đổi nó. Đó là sự khác biệt thực tiễn giữa một công cụ MCP được hỗ trợ bởi cơ sở hạ tầng thực và một truy vấn HTTP đơn giản: tác nhân yêu cầu một trang và nhận được trang mà người dùng sẽ thấy.
Markdown cũng là định dạng mà mô hình ngôn ngữ xử lý tiết kiệm nhất. Các tiêu đề, liên kết và cấu trúc đoạn văn được giữ nguyên, trong khi các tập lệnh, kiểu dáng và đánh dấu bố cục thì không, vì vậy agent dành bối cảnh của nó cho nội dung.
Kết luận
Kết nối CrewAI với Máy chủ MCP Scrapeless mất một từ điển và một trình quản lý bối cảnh. Máy chủ cung cấp 21 công cụ với các sơ đồ đối số riêng, crewai-tools chuyển đổi chúng thành các công cụ gốc của CrewAI, và việc đặt tên cụ thể cho các công cụ trong bộ chuyển đổi giữ cho bề mặt của mỗi agent đủ nhỏ để mô hình có thể sử dụng tốt.
Phần đáng mang vào dự án của bạn là bộ lọc công cụ. Một nhóm mà ở đó agent nghiên cứu giữ scrape_markdown và google_search, và một agent duyệt riêng giữ bộ công cụ browser_*, cung cấp cho mỗi mô hình một menu ngắn gọn và một công việc rõ ràng.
Bắt đầu với gói miễn phí Scrapeless để lấy khóa, xem xét giá cả Scrapeless khi bạn xác định khối lượng công việc, và đọc tổng quan về Máy chủ MCP Scrapeless để tham khảo đầy đủ về công cụ.
Câu hỏi thường gặp
Q: Địa chỉ đầu cuối của Máy chủ MCP Scrapeless cho CrewAI là gì?
Địa chỉ đầu cuối được lưu trữ là https://api.scrapeless.com/mcp, được truy cập qua giao thức streamable-http với khóa của bạn trong tiêu đề x-api-token. CrewAI không cần quy trình máy chủ cục bộ, vì các công cụ được phục vụ từ xa.
Q: Máy chủ MCP Scrapeless cung cấp bao nhiêu công cụ?
Một kết nối trực tiếp trả về 21 công cụ: mười sáu công cụ điều khiển phiên browser_*, ba công cụ truy xuất trang (scrape_markdown, scrape_html, scrape_screenshot), và hai công cụ tìm kiếm (google_search, google_trends). Kiểm tra danh sách tại thời điểm chạy thay vì giả định, vì máy chủ có thể thêm công cụ giữa các phiên bản.
Q: Tôi có thể giới hạn các công cụ MCP mà một agent nhận được không?
Có. Chuyển tên công cụ cho MCPServerAdapter sau từ điển máy chủ — MCPServerAdapter(server_params, "scrape_markdown", "google_search") sẽ chỉ trả về hai công cụ đó. Điều này giữ cho menu công cụ của mô hình ngắn gọn, thường cải thiện độ chính xác của việc lựa chọn.
Q: CrewAI có cần khóa LLM để kết nối với máy chủ MCP không?
Không. Việc bắt tay MCP, khám phá công cụ và các cuộc gọi công cụ trực tiếp đều chỉ cần khóa Scrapeless. Một khóa của nhà cung cấp mô hình là cần thiết vào thời điểm bạn gọi crew.kickoff(), vì đó là lúc một agent yêu cầu mô hình xem sử dụng công cụ nào.
Q: Tại sao nên sử dụng một trình quản lý bối cảnh với MCPServerAdapter?
Khối lệnh with mở phiên MCP khi vào và đóng nó khi thoát. Việc xây dựng bộ chuyển đổi mà không có nó sẽ để lại kết nối mở, và các công cụ chỉ hợp lệ trong khi phiên hoạt động — truy cập chúng sau khi phiên đóng sẽ phát sinh lỗi.
Q: scrape_markdown có xử lý các trang render trong trình duyệt không?
Có. Một trang mà viết nội dung của nó qua JavaScript vẫn trả lại nội dung đó ở định dạng markdown, vì việc render xảy ra ở phía máy chủ trước khi chuyển đổi. Một yêu cầu HTTP đơn giản của cùng một URL sẽ trả về mã nguồn trước khi render thay thế.
Q: Tôi nên kiểm tra điều gì trước khi chỉ định một nhóm vào một trang sống?
Xem xét các điều khoản của trang và các chỉ thị /robots.txt của nó, theo tiêu chuẩn Giao thức loại trừ Robots. Giới hạn việc thu thập ở các trang công cộng, và cung cấp cho nhóm một danh sách nhiệm vụ có giới hạn thay vì một chỉ dẫn thu thập mở — một vòng lặp agent có thể gửi nhiều yêu cầu hơn bạn dự định.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



