前段时间发现一个网站电子书库可以目录遍历直接下载pdf文件,于是在ChatGPT生成一段Python自动批量下载的代码,运行错误提示再反馈到ChatGPT改进代码,不一会儿就实现了功能。相比以往谷歌搜索找类似代码再根据自己需求修改,效率提高很多。
在当今科技迅速发展的时代,人工智能技术正在不断创新,为我们的生活带来了许多便利和机会。在这篇文章中,我们将分享一个有趣的经历,展示了如何借助 ChatGPT 编写 Python 代码,以实现自动批量下载 PDF 文件的功能。这个故事反映了科技如何改变我们的工作方式,提高了效率和创造力。
探索电子书库的宝藏
不久前,我发现了一个电子书库网站,提供了大量的电子书资源。然而,这些电子书都以 PDF 格式存储,而且网站上并没有提供方便的下载选项。为了获取这些有价值的电子书,我需要逐一手动下载,这显然是一个费时费力的任务。
ChatGPT 的帮助
幸运的是,我决定尝试一下 ChatGPT,看看它是否能够帮助我自动化这个任务。我向 ChatGPT 提出了一个问题:“能否帮助我编写 Python 代码,用于自动批量下载这些 PDF 文件?” ChatGPT 很快地生成了一段 Python 代码,用于下载电子书库中的 PDF 文件。我立刻将这段代码复制到我的开发环境中,并运行它。
从错误中学习
然而,在第一次尝试后,我遇到了一些错误。代码并没有完美地运行,我看到了错误消息。但这并没有使我气馁。相反,我将错误消息反馈给 ChatGPT,并询问是否有改进建议。ChatGPT 提供了一些有关如何处理错误的提示,并建议我修改代码以更好地满足我的需求。
迭代与成功
我迅速按照 ChatGPT 的建议对代码进行了修改,并再次运行了它。这一次,一切都顺利进行,代码成功地自动批量下载了所有 PDF 文件。这种体验非常令人兴奋,因为相比以往我需要在谷歌搜索中寻找类似的代码,并根据自己的需求进行修改,这个过程要复杂得多,也更费时间。
总结
这个故事展示了如何利用 ChatGPT 的强大能力来编写 Python 代码,以解决实际问题。科技的进步已经使我们能够更快、更智能地完成任务,提高了效率和创造力。未来,随着人工智能技术的不断发展,我们可以期待更多的创新和便利,改变着我们的生活和工作方式。
最后,本文也是借助ChatGPT润色完善的。以下是输入给AI原始内容:
请润色下列段落文字,生成一篇微信公众号文章:
科技改变生活:借助ChatGPT写Python代码
前段时间发现一个网站电子书库可以目录遍历直接下载pdf文件,于是在ChatGPT生成一段Python自动批量下载的代码,运行错误提示再反馈到ChatGPT改进代码,不一会儿就实现了功能。相比以往谷歌搜索找类似代码再根据自己需求修改,效率提高很多。
附上初始代码:
用python实现asp服务器 web目录及子目录批量下载pdf电子书,并检查文件名编码自动转换成UTF-8格式编码存储
ChatGPT
要使用 Python 实现批量下载 ASP 服务器上的 Web 目录及其子目录中的 PDF 电子书,并检查文件名编码并自动转换为 UTF-8 格式编码后存储,您可以采取以下步骤:
1. 导入所需的 Python 模块:
```
pythonCopy codeimport os
import requests
from bs4 import BeautifulSoup
import urllib.parse
```
1. 定义一个函数,用于下载 PDF 电子书并自动转换文件名编码:
```
pythonCopy codedef download_and_convert_ebooks(url, output_directory):
# 发送 HTTP 请求并获取页面内容
response = requests.get(url)
# 使用 BeautifulSoup 解析页面内容
soup = BeautifulSoup(response.text, 'html.parser')
# 查找页面中的 PDF 链接
pdf_links = soup.find_all('a', href=True)
for link in pdf_links:
pdf_url = urllib.parse.urljoin(url, link['href'])
pdf_filename = os.path.basename(pdf_url)
# 下载 PDF 文件
response = requests.get(pdf_url)
# 将文件名编码转换为 UTF-8
pdf_filename = pdf_filename.encode('latin-1').decode('utf-8')
# 保存文件到指定目录
with open(os.path.join(output_directory, pdf_filename), 'wb') as f:
f.write(response.content)
print(f"已下载并保存:{pdf_filename}")
```
1. 调用上述函数来下载 PDF 电子书。例如:
```
pythonCopy codeweb_url = "https://example.com/ebooks" # 替换为 ASP 服务器的 Web 目录 URL
output_dir = "/path/to/save/pdfs" # 指定保存 PDF 的本地目录
download_and_convert_ebooks(web_url, output_dir)
```
在这个示例中,我们定义了一个函数 `download_and_convert_ebooks`,该函数接受 ASP 服务器 Web 目录的 URL 和本地存储目录作为参数。它将查找 Web 页面中的 PDF 链接,下载每个 PDF 文件,并将文件名编码转换为 UTF-8 格式,然后将文件保存到本地目录。
请确保替换 `web_url` 和 `output_dir` 为实际的 ASP 服务器 Web 目录 URL 和本地存储目录。此示例假定您使用了 BeautifulSoup 库来解析 Web 页面内容,因此您需要确保已安装 BeautifulSoup,可以使用 `pip` 进行安装。
通过ChatGPT多次迭代的代码:
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import chardet
# 设置目标ASP服务器的URL
base_url = 'http://ip/ebooks/' # 替换为实际ASP服务器的URL
output_dir = 'C:/ebook/' # 指定下载文件保存的目录
# 创建输出目录(如果不存在)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 定义一个函数来递归下载文件
def download_files(url):
try:
response = requests.get(url)
response.raise_for_status()
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')
# 查找所有链接
links = soup.find_all('a')
# 遍历链接并下载PDF文件
for link in links:
href = link.get('href')
if href:
full_url = urljoin(url, href)
if full_url.endswith('.pdf'):
# 获取文件名
response = requests.head(full_url)
content_type = response.headers.get('content-type')
content_disposition = response.headers.get('content-disposition')
if content_disposition and 'filename=' in content_disposition:
filename_start = content_disposition.index('filename=') + len('filename=')
filename = content_disposition[filename_start:].strip(' \t\n\r"')
else:
filename = os.path.basename(full_url)
# 检测文件名编码并转换为UTF-8
filename = os.fsdecode(filename) # 将文件名从字节序列解码为字符串
pdf_filename = os.path.join(output_dir, filename)
# 下载PDF文件
pdf_response = requests.get(full_url)
pdf_response.raise_for_status()
with open(pdf_filename, 'wb') as pdf_file:
pdf_file.write(pdf_response.content)
print(f"下载完成:{pdf_filename}")
# 查找子目录并递归下载
for link in links:
href = link.get('href')
if href and href.endswith('/'):
subdir_url = urljoin(url, href)
download_files(subdir_url)
except Exception as e:
print(f"下载错误:{e}")
# 开始下载
download_files(base_url)