在今天的数字时代,微信公众号已经成为了信息传播的重要平台之一。许多人都喜欢阅读各种各样的文章,但有时候我们可能想要将一篇精彩的文章保存在本地,以便离线阅读或备份。本教程将介绍如何使用Python编写一个小工具,能够自动下载微信公众号文章并打包成ZIP文件,让您随时随地畅享文章内容。
故事开端
假设你是一名热衷于阅读微信公众号文章的用户,每天都会在不同的公众号上发现一些精彩的文章。然而,由于网络连接不稳定或者其他原因,你可能无法保证每次都能在线阅读这些文章。因此,你希望有一种方法能够将这些文章保存在本地,以便随时查看。同时,你还希望能够将文章中的图片也一并下载下来,以免文章内容不完整。于是,你决定使用Python编写一个工具来实现这个愿望。
准备工作
在开始编写代码之前,你需要做一些准备工作。首先,确保你的计算机上已经安装了Python编程环境。你还需要安装以下几个Python库:
requests
:用于发送HTTP请求,获取网页内容。BeautifulSoup
:用于解析HTML页面,提取文章内容和图片链接。
你可以使用以下命令来安装这些库:
pip install requests beautifulsoup4
编写代码
现在,让我们开始编写代码。以下是关键部分的核心代码示例,用于实现微信公众号文章的下载和图片的下载:
# 导入必要的库
import requests
from bs4 import BeautifulSoup
import os
import time
from re import findall
# 获取微信公众号内容,保存标题和时间
def get_weixin_html(url):
global weixin_time, weixin_title
res = requests.get(url)
soup = BeautifulSoup(res.text, "html.parser")
# 获取标题
temp = soup.find('h1')
weixin_title = temp.string.strip()
# 获取正文html并修改
content = soup.find(id='js_content')
soup2 = BeautifulSoup((str(content)), "html.parser")
soup2.div['style'] = 'visibility: visible;'
html = str(soup2)
pattern = r'http?:\/\/[a-z.A-Z_0-9\/\?=-_-]+'
result = findall(pattern, html)
# 将data-src修改为src
for url in result:
html = html.replace('data-src="' + url + '"', 'src="' + url + '"')
return html
# 上传图片至服务器
def download_pic(content):
pic_path = htmlsavepath + '/' + weixin_title + '/' + 'pic/'
if not os.path.exists(pic_path):
os.makedirs(pic_path)
# 使用正则表达式查找所有需要下载的图片链接
pattern = r'http?:\/\/[a-z.A-Z_0-9\/\?=-_-]+'
pic_list = findall(pattern, content)
for index, item in enumerate(pic_list, 1):
count = 1
flag = True
pic_url = str(item)
while flag and count <= 10:
try:
data = requests.get(pic_url)
if pic_url.find('png') > 0:
file_name = str(index) + '.png'
elif pic_url.find('gif') > 0:
file_name = str(index) + '.gif'
else:
file_name = str(index) + '.jpg'
with open(pic_path + file_name, "wb") as f:
f.write(data.content)
# 将图片链接替换为本地链接
content = content.replace(pic_url, 'pic/' + file_name)
flag = False
count += 1
print('...')
time.sleep(1)
except:
count += 1
time.sleep(1)
if count > 10:
print("下载出错:", pic_url)
return content
上述代码中,我们首先导入了所需的库,然后定义了两个关键函数:get_weixin_html
用于获取微信公众号文章的HTML内容,download_pic
用于下载文章中的图片并替换图片链接。这些函数将帮助我们实现文章的下载和保存。
使用示例
接下来,我们将展示如何使用这些函数来下载微信公众号文章。你可以按照以下步骤进行操作:
- 定义微信公众号文章的链接和保存目录:
wechat_article_url = "https://mp.weixin.qq.com/s/GSdK9it0N1As3H-pQ4mGdA"
save_directory = "C:/微信公众号下载/12"
- 调用
get_weixin_html
函数来获取文章的HTML内容:
article_html = get_weixin_html(wechat_article_url)
- 调用
download_pic
函数来下载文章中的图片:
article_with_local_pic = download_pic(article_html)
- 最后,你可以将文章内容保存为HTML文件,以及将图片一起打包成ZIP文件:
# 保存文章内容为HTML文件
html_file_path = os.path.join(save_directory, weixin_title + ".html")
with open(html_file_path, "w", encoding="utf-8") as html_file:
html_file.write(article_with_local_pic)
# 打包成ZIP文件
import zipfile
zip_file_path = os.path.join(save_directory, weixin_title + ".zip")
with zipfile.ZipFile(zip_file_path, "w") as zipf:
# 添加HTML文件
zipf.write(html_file_path, arcname=os.path.basename(html_file_path))
# 添加图片文件夹
pic_folder = os.path.join(save_directory, weixin_title, "pic")
for root, dirs, files in os.walk(pic_folder):
for file in files:
zipf.write(os.path.join(root, file), arcname=os.path.join("pic", file))
总结
通过这个小工具,你可以轻松地将你喜欢的微信公众号文章保存在本地,并确保文章中的图片也被正确下载和保存。这不仅提供了离线阅读的便利,还可以用于备份你感兴趣的文章。希望这个教程对你有所帮助,让你更好地利用Python来实现自己的需求。
通过学习本教程,你不仅可以掌握如何编写网络爬虫程序,还可以了解如何使用Python处理HTML页面和下载文件。这些技能在许多领域都非常有用,无论是数据采集、网站分析,还是其他需要获取网络信息的任务,都可以受益于这些技能。希望你能够享受到编程的乐趣,并不断探索更多有趣的项目和应用。
Punctuation: Use English punctuation throughout.
Language: The article should be written exclusively in Chinese.