如何使用Python从HTML文件中提取链接且排除附属文本
Python 从a标签中仅提取目标href链接(不附带抓取展示文本)
你给出的待处理HTML片段经转义还原后的实际结构为:
<a href="https://www.mk.co.kr/news/culture/view/2021/03/258551/"">abcdefg~blahblahblah</a>
该片段的href属性值末尾附带冗余多余引号,属于网页常见脏数据,解析过程需要兼容这类异常格式。
生产环境推荐方案(BeautifulSoup解析)
相比正则方案,专门的HTML解析库容错性更强,不会因标签格式偏差出现匹配失效问题,提取href属性时完全不会连带读取标签包裹的展示文本:
- 安装依赖:运行
pip install beautifulsoup4 lxml - 实现代码:
from bs4 import BeautifulSoup # 替换为实际待处理的原始HTML字符串 raw_html = '<a href="https://www.mk.co.kr/news/culture/view/2021/03/258551/"">abcdefg~blahblahblah</a>' soup = BeautifulSoup(raw_html, 'lxml') # 定位a标签,直接提取href属性值,不会读取标签内的展示文本 target_link = soup.find('a').get('href') print(target_link)
- 运行输出:
https://www.mk.co.kr/news/culture/view/2021/03/258551/
无依赖轻量方案(正则实现)
仅适合临时处理固定格式的简单HTML片段,无需安装第三方库即可完成提取:
import re raw_html = '<a href="https://www.mk.co.kr/news/culture/view/2021/03/258551/"">abcdefg~blahblahblah</a>' # 匹配规则兼容单/双引号包裹的href、属性间多余空格、后续冗余属性的场景 match_result = re.search(r'<a[^>]*?href\s*=\s*["\']([^"\']+)["\']', raw_html) if match_result: target_link = match_result.group(1) print(target_link)
注意:正则解析HTML的容错性较差,碰到属性顺序变动、URL嵌套特殊字符的场景容易出现匹配错误,不适合大规模爬取任务使用。
内容的提问来源于stack exchange,提问作者komerican
相关产品推荐
相关产品推荐

