如何使用NiFi提取HTML页面中所有href属性内的路径
NiFi提取HTML中href路径的配置方法
整体处理链路
直接用NiFi原生处理器即可完成需求,推荐流程如下:
- 源数据获取处理器:根据HTML来源选择,拉取远程网页用
InvokeHTTP,读取本地HTML文件用GetFile - 核心提取处理器:
ExtractText,通过正则匹配所有href属性的路径值 - 内容替换处理器:
ReplaceText,将原有HTML内容替换为提取到的路径列表 - 可选处理器:如果需要把每条路径拆成独立流文件,加
SplitText,行拆分计数设为1即可;如果需要过滤特定路径,加RouteOnContent配置匹配规则即可 - 输出处理器:按存储需求选择,存本地用
PutFile,发消息队列用对应发布处理器即可
核心配置细节
1. ExtractText处理器配置
新增自定义动态属性,配置如下:
- 属性名:
all_href - 属性值(正则表达式):
(?i)<a\s+href="([^"]+)" - 该属性的配置项调整:
- 开启「不区分大小写匹配」
- 开启「匹配所有符合项」
- 开启「捕获组启用」
其余配置保持默认即可。运行后所有匹配到的href路径会被存入流文件的all_href属性中,多条路径默认以换行符分隔。
2. ReplaceText处理器配置
用来把原有HTML流内容替换为提取到的路径列表,配置如下:
- 替换策略:
始终替换 - 搜索值:
.*(匹配原有全部HTML内容,开启单行匹配模式) - 替换值:
${all_href} - 字符集:
UTF-8
处理完成后,流文件内容就是逐行排列的href路径,和要求的输出格式完全一致。
结果校验
处理完成后预览流文件内容,即可得到如下格式的结果:
/Reports/Current/ /Reports/Current/DispatchIS_Reports/DUPLICATE/ /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262235_0000000365889273.zip /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262240_0000000365889453.zip /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262245_0000000365889621.zip /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262250_0000000365889822.zip /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262255_0000000365889975.zip /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262300_0000000365890155.zip /Reports/Current/DispatchIS_Reports/PUBLIC_DISPATCHIS_202206262305_0000000365890351.zip
如果需要排除特定路径(比如给出的期望结果中未包含最后一条2305的zip文件),直接在ReplaceText后新增一个ReplaceText处理器,搜索值填写要排除的路径加换行符,替换值留空即可删除对应行。
注:该方案针对目录列表类HTML页面适配,这类页面格式固定,正则匹配的稳定性足够,不需要引入额外的HTML解析处理器,配置简单效率高。
内容的提问来源于stack exchange,提问作者Sumit Manna
相关产品推荐
相关产品推荐

