如何从用户输入字符串中提取目标内容,生成维基百科URL并爬取指定页面元素
维基百科指令处理与爬取功能完整实现方案
1. 输入文本清洗与核心主题提取
- 提前梳理两类需要直接剔除的冗余内容
- 核心触发词:覆盖所有
quote相关的全形态变体,包含quote、quoted、quoting不同形式的词汇 - 无意义引导词:覆盖用户输入里常见的、不承载主题信息的客套表述,比如
could you、for me、please、give me、i want
- 核心触发词:覆盖所有
- 清洗执行流程
- 先把全量输入文本统一转成小写,做无大小写差异的精准匹配,避免因为大小写不同漏删冗余内容
- 用正则匹配所有待剔除内容在文本中的位置,把对应片段从原文本中移除
- 清理移除片段后残留的多余空格、无意义标点,比如句尾的问号、感叹号、多余的逗号
- 剩下的连续有效文本就是提取到的核心主题,比如输入
could you quote for me Python syntax and semantics,剔除所有冗余后就能得到核心主题Python syntax and semantics
2. 核心主题转维基百科URL适配格式
- 英文维基百科条目的固定基础路径为
https://en.wikipedia.org/wiki/,把标准化处理后的主题名称拼接到路径后面,就能得到可直接访问的条目地址 - 主题名称标准化转换规则
- 把核心主题里的所有半角空格替换成下划线
_ - 对主题里包含的特殊字符做URL编码适配,保证地址格式合规
- 用转换完成的标准化主题字符串拼接基础路径,就能生成目标条目URL,比如核心主题
Python syntax and semantics经转换后为Python_syntax_and_semantics,拼接后得到对应条目地址https://en.wikipedia.org/wiki/Python_syntax_and_semantics
- 把核心主题里的所有半角空格替换成下划线
3. 网络请求与页面元素爬取实现
- 请求层封装
- 给请求配置常规浏览器的User-Agent标识,规避基础的反爬拦截
- 设置3秒的请求超时阈值,请求失败后自动重试2次,降低临时网络波动带来的请求失败概率
- 页面解析逻辑
- 用网页解析库定位需要提取的页面元素,比如条目摘要段落、章节标题、指定正文模块等内容
- 对解析得到的文本做二次清洗,移除残留的HTML标签、多余换行、引用角标等无关内容
- 异常容错处理
- 增加HTTP状态码判断逻辑,如果请求返回404状态码,说明当前生成的URL对应条目不存在,直接返回未找到对应主题条目的提示
- 增加空值判断,如果清洗后得到的核心主题为空,提示用户重新输入有效指令
这套逻辑是通用实现,不需要硬编码单个条目的匹配规则,就能支持所有用户任意输入的指令场景。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

