背景:
前面2篇已经大致介绍了Dify插件开发及插件授权校验,这篇我们将基于Crawl4ai实现输入网址和网址路径过滤,输出符合条件的页面URL集合的简单爬虫
材料:
1、完备的开发环境
2、预安装Crawl4ai环境(Installation - Crawl4AI Documentation (v0.7.x))
制作:
编写代码:
1、在 tools 目录下面创建一个Crawl4ai爬虫的实现核心逻辑deep_crawl_example.py
1.1、实现如下逻辑
async def deep_crawl_url(url, uRLPatternFilter):
async with AsyncWebCrawler() as crawler:
# Start crawling and follow links dynamically
results = await crawler.arun(url, config=config)
# 使用正则表达式提取所有链接
def extract_links(results, uRLPatternFilter):
"""从HTML中提取所有链接"""
returnlinks = [
link for link in results[0].links['internal']
if str(link['href']).endswith(('.htm', '.html')) and
any(keyword in str(link).lower()
for keyword in uRLPatternFilter)
]
# return list(set(all_urls)) # 去重
return returnlinks
links = extract_links(results, uRLPatternFilter)
print(f"Discovered and crawled {len(links)} pages")
return links
本函数通过输入url,uRLPatternFilter 2个参数简单实现了Cawl4ai 爬取网站页面内容并从众多URL中根据uRLPatternFilter 条件过滤出符合条件的URL。
1.2、await crawler.arun(url, config=config) 中的config 函数的实现如下
# Configure a 2-level deep crawl
config = CrawlerRunConfig(
deep_crawl_strategy=BFSDeepCrawlStrategy(
max_depth=0, # Crawl 2 levels deep
include_external=False, # Stay within domain
max_pages=50, # Limit for efficiency
filter_chain=filter_chain
),
verbose=True
)
说明:该参数的配置请参阅官方文档(Browser, Crawler & LLM Config - Crawl4AI Documentation (v0.7.x))
1.3、上面CrawlerRunConfig 配置中涉及到的过滤链函数filter_chain 实现逻辑如下:
# Create a sophisticated filter chain
filte

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



