使用Python的BeautifulSoup爬取并下载PDF文件:如何将文件名替换为对应描述文本
修改PDF文件名以匹配链接描述文本的解决方案
没问题,要实现用链接的描述文本给PDF命名非常简单,核心就是提取<a>标签的文本内容,再处理成合法的文件名即可。以下是修改后的完整代码,我会标注关键改动:
import os import requests from urllib.parse import urljoin from bs4 import BeautifulSoup url = "https://www.archives.gov/research/pentagon-papers" folder_location = r'E:\webscraping' if not os.path.exists(folder_location): os.mkdir(folder_location) response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 定义Windows文件名中不允许的非法字符 invalid_filename_chars = '<>:"/\\|?*' for link in soup.select("a[href$='.pdf']"): # 提取链接的描述文本,strip()去除前后多余的空格和换行 link_text = link.get_text(strip=True) # 清理非法字符:将不允许的字符替换为下划线 cleaned_filename = ''.join( char if char not in invalid_filename_chars else '_' for char in link_text ) # 拼接完整的文件路径,加上.pdf后缀 filename = os.path.join(folder_location, f"{cleaned_filename}.pdf") # 下载并保存文件 with open(filename, 'wb') as f: pdf_url = urljoin(url, link['href']) f.write(requests.get(pdf_url).content)
关键改动说明:
- 提取链接文本:使用
link.get_text(strip=True)获取<a>标签内的描述文本,strip=True能自动去除文本前后的空格、换行符等冗余内容。 - 清理非法字符:因为Windows系统的文件名不能包含
<>:\"/\\|?*这些字符,所以我们遍历文本中的每个字符,把非法字符替换为下划线(你也可以根据需求改成其他合法字符,或者直接删除)。 - 构造文件名:将清理后的文本加上
.pdf后缀,再和文件夹路径拼接,得到最终的保存路径。
这样修改后,下载的PDF文件就会以对应的描述文本命名,比如你提到的[Part II] U.S. Involvement in the Franco-Viet Minh War, 1950-1954.pdf,而不是URL里的文件名了。
内容的提问来源于stack exchange,提问作者ECII
相关产品推荐
相关产品推荐

