学生时代的文章
学生时代用Mac,当时用了一个客户端叫MWeb,挺好用,独立开发者开发的。还记得当时找他聊天,想找他蹭点优惠的。没想到聊着聊着觉得他太不容易了,当场就买了一套全款的。换Windows之后一直没能整理。这次用全markdown来整理资料了,终于还是整理了一下,没想到这里面的内容还挺多。
用chatgpt帮忙写了个脚本,中间改了几个版本。没想到chatgpt理解了我的需求,而且完美的修改了代码,但我在执行时候自己惹出了bug。例如:函数同名、文件操作过多等等。事实上,在MWeb生成的目录下,只有14*.html
才是有用的,别的文件都是辅助,可以扔掉。结果由于其他文件里有重复信息,反而影响了真正的文章内容的提取。下面这个是有效的脚本。文章应该都正确提取了。
from bs4 import BeautifulSoup
def html_to_markdown(html):
soup = BeautifulSoup(html, 'html.parser')
# 提取标题
title = soup.find('h1', class_='entry-title').text
markdown = f"# {title}\n\n"
# 提取日期
date = soup.find('time').text
markdown += f"**Date:** {date}\n\n"
# 提取文章内容
content = soup.find('div', class_='entry-content')
# 遍历内容中的所有元素
for element in content.descendants:
if isinstance(element, str):
# 直接添加文本内容
text = element.strip()
if text:
markdown += text
elif element.name == 'br':
markdown += " \n"
elif element.name == 'code':
# 处理代码块
code_text = element.get_text(strip=True)
markdown += f"\n```\n{code_text}\n```\n"
elif element.name in ['p', 'div']:
markdown += "\n\n" # 段落或div结束时添加换行
# 提取footer中的类别和链接
footer = soup.find('footer')
if footer:
categories = footer.find('span', class_='categories')
if categories:
links = categories.find_all('a')
if links:
category_list = [f"[{link.text}]({link['href']})" for link in links]
markdown += f"\n**Categories:** {', '.join(category_list)}\n"
return title, markdown.strip()
import sys
from bs4 import BeautifulSoup
def extract_article_from_file(file_path):
# 读取本地HTML文件
with open(file_path, 'r', encoding='utf-8') as file:
html = file.read()
# 解析HTML
soup = BeautifulSoup(html, 'html.parser')
# 查找<article>节点
article = soup.find('article')
if not article:
raise ValueError("No <article> tag found in the HTML file.")
return str(article)
def main():
if len(sys.argv) != 2:
print("Usage: python script.py <path_to_html_file>")
sys.exit(1)
file_path = sys.argv[1]
try:
# 提取<article>内容
article_html = extract_article_from_file(file_path)
# 转换<article>内容为Markdown
title, markdown_content = html_to_markdown(article_html)
title = title.replace('/', '-')
with open(title+'.md', 'w') as f:
f.write(markdown_content)
except Exception as e:
print(f"Error: {e}")
sys.exit(1)
if __name__ == "__main__":
main()