Python下载网页附件PDF并分类
简介
在日常工作中,我们经常需要从网页上下载一些附件,例如PDF文档。而且,这些附件可能会被存储在不同的网页上,这就需要我们根据一定的规则来进行分类。本文将介绍如何使用Python来下载网页附件PDF并进行分类,帮助读者更加高效地处理网页上的附件。
准备工作
在开始编写代码之前,我们需要安装几个Python库,分别是requests
、beautifulsoup4
和os
。requests
库用于发送HTTP请求,beautifulsoup4
库用于解析HTML,os
库用于操作文件和目录。
可以通过以下命令使用pip
来安装这些库:
pip install requests beautifulsoup4
下载单个PDF附件
首先,我们需要找到包含PDF附件的网页。我们可以使用requests
库来发送HTTP请求,并使用beautifulsoup4
库来解析返回的HTML内容。
import requests
from bs4 import BeautifulSoup
# 发送HTTP GET请求
response = requests.get('
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的链接
links = soup.find_all('a')
# 遍历链接
for link in links:
# 如果链接的文本包含PDF
if 'PDF' in link.text:
# 获取链接的地址
pdf_url = link['href']
# 发送HTTP GET请求
pdf_response = requests.get(pdf_url)
# 下载PDF文件
with open('output.pdf', 'wb') as f:
f.write(pdf_response.content)
在上面的代码中,我们首先发送一个HTTP GET请求来获取网页的内容,然后使用BeautifulSoup
将返回的HTML内容转换为一个Soup
对象。接下来,我们使用find_all
方法找到所有的链接,并遍历这些链接。如果链接的文本包含"PDF",我们就获取链接的地址,并发送一个新的HTTP GET请求来下载PDF文件。
请注意,上面的代码中,我们将PDF文件保存为output.pdf
。你可以根据自己的需求修改文件名和保存路径。
下载并分类多个PDF附件
如果我们需要从多个网页上下载PDF附件,并进行分类保存,我们可以使用os
库来操作文件和目录。
import requests
from bs4 import BeautifulSoup
import os
# 创建目录
if not os.path.exists('pdfs'):
os.makedirs('pdfs')
# 发送HTTP GET请求
response = requests.get('
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的链接
links = soup.find_all('a')
# 遍历链接
for link in links:
# 如果链接的文本包含PDF
if 'PDF' in link.text:
# 获取链接的地址
pdf_url = link['href']
# 发送HTTP GET请求
pdf_response = requests.get(pdf_url)
# 提取文件名
filename = pdf_url.split('/')[-1]
# 保存PDF文件
with open(os.path.join('pdfs', filename), 'wb') as f:
f.write(pdf_response.content)
在上面的代码中,我们首先使用os.makedirs
方法创建一个名为pdfs
的目录。然后,我们使用os.path.join
方法将目录和文件名合并,并使用open
函数创建一个文件对象。最后,我们使用write
方法将下载的PDF内容写入到文件中。
文件分类
如果PDF附件存储在不同的网页上,并且我们需要根据一定的规则来进行分类保存,我们可以使用正则表达式或其他方法来提取分类信息。下面是一个示例,假设我们需要根据PDF标题中的分类信息进行保存。
import requests
from bs4 import BeautifulSoup
import os
import re
# 创建目录
if not os.path.exists('pdfs'):
os.makedirs('pdfs')
# 发送HTTP GET请求
response = requests.get('
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的链接
links = soup.find_all('a')
# 遍历链接
for link in links:
# 如果链接的文本包含PDF
if 'PDF' in link.text:
# 获取链接的地址
pdf_url = link['href