Python提取HTML中特定PDF链接的方法求助
解决Python提取HTML中PDF链接的问题
给你两种可行的方案,新手也能快速上手:
方案1:用正则表达式(适合当前简单HTML结构)
你之前用正则失败大概率是匹配规则没写对,试试这个精准匹配的规则:
import re # 假设你已经把HTML内容读取到了html_content变量中 html_content = """<td><a href="/archiv/zivotopisy/2022/6/Zivotopis-OJVLA-20220624132548.pdf" target="_blank">Jitka Horáková</a></td> <td><a href="/archiv/zivotopisy/2022/6/Zivotopis-XUBIC.pdf" target="_blank">Bohumil Tobolka</a></td> <td><a href="/archiv/zivotopisy/2022/5/Zivotopis-UNBLA.pdf" target="_blank">Stanislava Rousová, Ing.</a></td> <td><a href="/archiv/zivotopisy/2022/4/Zivotopis-NYBCF-20220407134152.pdf" target="_blank">Ladislav Macháč</a></td> <td><a href="/archiv/zivotopisy/2022/4/Zivotopis-PVDPA.pdf" target="_blank">Dana Macháčová</a></td>""" # 匹配以/archiv开头、.pdf结尾的href属性值 pattern = r'href="(/archiv.*?\.pdf)"' links = re.findall(pattern, html_content) # 将提取到的链接写入TXT文件 with open('pdf_links.txt', 'w', encoding='utf-8') as f: for link in links: f.write(link + '\n')
说明:.*?是非贪婪匹配,避免把多个链接误识别成一个;\.是转义点号,因为正则里点号默认匹配任意字符。
方案2:用HTML解析库(推荐,更健壮)
如果以后HTML结构变复杂(比如标签嵌套、属性顺序改变),正则很容易失效,用BeautifulSoup解析HTML更靠谱:
- 先安装依赖库:
pip install beautifulsoup4 - 运行下面的代码:
from bs4 import BeautifulSoup html_content = """<td><a href="/archiv/zivotopisy/2022/6/Zivotopis-OJVLA-20220624132548.pdf" target="_blank">Jitka Horáková</a></td> <td><a href="/archiv/zivotopisy/2022/6/Zivotopis-XUBIC.pdf" target="_blank">Bohumil Tobolka</a></td> <td><a href="/archiv/zivotopisy/2022/5/Zivotopis-UNBLA.pdf" target="_blank">Stanislava Rousová, Ing.</a></td> <td><a href="/archiv/zivotopisy/2022/4/Zivotopis-NYBCF-20220407134152.pdf" target="_blank">Ladislav Macháč</a></td> <td><a href="/archiv/zivotopisy/2022/4/Zivotopis-PVDPA.pdf" target="_blank">Dana Macháčová</a></td>""" # 解析HTML内容 soup = BeautifulSoup(html_content, 'html.parser') links = [] # 遍历所有a标签,筛选符合条件的链接 for a_tag in soup.find_all('a'): href = a_tag.get('href') if href and href.startswith('/archiv') and href.endswith('.pdf'): links.append(href) # 写入文件 with open('pdf_links.txt', 'w', encoding='utf-8') as f: for link in links: f.write(link + '\n')
这个方法直接基于HTML结构解析,不用纠结正则的匹配细节,容错性更强。
内容的提问来源于stack exchange,提问作者Alhanz
相关产品推荐
相关产品推荐

