学生时代的文章

学生时代的文章

学生时代用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()