把Html页面转化为简单的Markdown文件

/ Markdown / 没有评论 / 1846浏览

其一,代码内容

用Python3.5.2可以运行,产生正常结果,详细内容看代码。 这个东西的缺点还是比较明显的:

  1. 目前只适配了萌娘百科这种大段文字的网站,a标签和img标签还没写出来;
  2. 对萌娘百科常见的del标签处理的很难看;
  3. 对translate方法中的大片if-elif-else很不满,因为修改起来太麻烦了,又不可能对选择分支加装饰器一类的东西。暂时还想不到别的办法。
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re


class Translator(object):
    markList = {"h1", "h2", "h3", "p"}

    def find_we_need(self, url):
        sourcePage = urlopen(url)
        bsObj = BeautifulSoup(sourcePage, "html.parser")
        #这个mw-navigation是萌娘百科的导航块,这么写就只能适用于萌娘百科了,很不爽,
        #以后用在其他网站的时候再想怎么兼容好了。
        bsObj.find('div', id = 'mw-navigation').decompose()
        contents = bsObj.findAll(self.markList)
        return contents
    
    def translate(self, sources):
        md_file = open("markdown.md", "w")
        for content in sources:
            # 直接取消html的换行符,自己加
            if re.search('</?br ?/?>', str(content)):
                continue
    
            # 萌娘百科吐槽特色用的删除线,其他网站应该有类似的
            elif re.search('<del>.*?</del>', str(content)):
                p = re.compile(r'</?del>')
                for a in p.split(str(content)):
                    if re.search(r'<.*?>', a) == None:
                        md_file.write('<del>' + a + '</del>')
                    else:
                        tbs = BeautifulSoup(a, "html.parser")
                        #下面两行是用来去除回车符的
                        #与最下面处理p标签的分支具有相同的功能
                        #求大神指导一下QAQ
                        r_content = tbs.get_text()
                        r_content = re.match(r'.*?$', r_content)
                        md_file.write(r_content.group())
                md_file.write('  \n')
    
            # h1~h6,最省心标签
            elif re.search('<h1+', str(content)):
                md_file.write('#' + content.get_text() + '  \n')
            elif re.search('<h2+', str(content)):
                md_file.write('##' + content.get_text() + '  \n')
            elif re.search('<h3+', str(content)):
                md_file.write('###' + content.get_text() + '  \n')
            elif re.search('<h4+', str(content)):
                md_file.write('####' + content.get_text() + '  \n')
            elif re.search('<h5+', str(content)):
                md_file.write('#####' + content.get_text() + '  \n')
            elif re.search('<h6+', str(content)):
                md_file.write('######' + content.get_text() + '  \n')
    
            # p标签,随意写就好
            elif re.search('<p>.*?', str(content)):
                r_content = content.get_text()
                #这里利用了正则匹配符$的“只到结尾或回车符之前”的特性,屏蔽了结尾的换行
                r_content = re.match(r'.*?$', r_content)
                md_file.write(r_content.group() + '  \n')
    
            # print(content)
        md_file.close()

if __name__ == "__main__":
    translator = Translator()
    #这个Url指向一个百合老番的女主的简介页面,可以改成别的。
    url = "https://zh.moegirl.org/%E5%A8%9C%E8%92%82"
    sources = translator.find_we_need(url)
    translator.translate(sources)

教训: 在设定需要的标签的时候,一定要分清楚必须的标签和不太重要的标签(如del),否则外面的p标签会打印一遍,里面的del标签又会打印一遍.

其二,转化的结果

显示出来的样子:

娜蒂

娜蒂是由真下耕一所导演的美少女枪战三部曲最终作《魔女猎人》及其衍生作品的登场角色。

简介

流浪着的赏金猎人,虽然开朗却从没有旅伴。接下了Blue Eyes的委托因而接近并控制住了艾丽丝,但在与艾丽丝的相处过程中与艾丽丝产生了强烈的互相依赖,并以一己之力护送艾丽丝踏上了向南追寻故乡的旅程。常伴身边的武器是旧式45口径柯尔特自动手枪,在打倒对手之前会骄傲地宣告:“如果有什么遗言的话,现在就说吧!”而唯一一次没能把这句话说出口的时候,是结尾之前娜蒂将子弹射向了艾丽丝的片段。在了结了艾丽丝之后,红发的乐天少女向自己扣动了扳机。

娜蒂与艾丽丝

在遇见艾丽丝之前,娜蒂毫无疑问已经非常适应故事背景所在的社会了。游刃有余的流浪生活,乐天开朗的性格,强于常人的与能力,出众的枪法,这些无一不让赏金猎人娜蒂的生活顺利地进行着。在接触艾丽丝最开始的一段时间里,娜蒂完整而忠实地完成着赏金猎人的任务,但是随着与艾丽丝的旅途逐渐深入展开,娜蒂反而不知道自己追寻的到底是什么了。向南,向南,娜蒂与艾丽丝见到了很多不同的人,经历了很多不同的故事,也一路披襟斩棘地击退了所有让艾丽丝不开心的人,最终发现自己想要的似乎是温暖的陪伴。为了这一个陪伴,娜蒂表露出了愿意放弃自己喜欢的生活的决心。在故事的结尾,娜蒂与艾丽丝本已隐于无名小镇,但是当艾丽丝看着娜蒂的眼睛认真地说出:“喜欢娜蒂发光的眼睛!”的时候,娜蒂又一次宠溺地笑了。于是,在连天的公路上,两个人再一次踏上了新的旅途。 在pinterest上,娜蒂与艾丽丝毫无争议地被外国友人选进了best couple ever的名单…

注释与外部链接 (日文)动画官网角色页

Markdown:

#娜蒂  
娜蒂是由真下耕一所导演的美少女枪战三部曲最终作《魔女猎人》及其衍生作品的登场角色。  
##简介  
流浪着的赏金猎人,虽然开朗却从没有旅伴。接下了Blue Eyes的委托因而接近并控制住了艾丽丝,但在与艾丽丝的相处过程中与艾丽丝产生了强烈的互相依赖,并以一己之力护送艾丽丝踏上了向南追寻故乡的旅程。常伴身边的武器是旧式45口径柯尔特自动手枪,在打倒对手之前会骄傲地宣告:“如果有什么遗言的话,现在就说吧!”而唯一一次没能把这句话说出口的时候,是结尾之前娜蒂将子弹射向了艾丽丝的片段。在了结了艾丽丝之后,红发的乐天少女向自己扣动了扳机。  
##娜蒂与艾丽丝  
在遇见艾丽丝之前,娜蒂毫无疑问已经非常适应故事背景所在的社会了。游刃有余的流浪生活,乐天开朗的性格,强于常人的与能力,出众的枪法,这些无一不让赏金猎人娜蒂的生活顺利地进行着。在接触艾丽丝最开始的一段时间里,娜蒂完整而忠实地完成着赏金猎人的任务,但是随着与艾丽丝的旅途逐渐深入展开,娜蒂反而不知道自己追寻的到底是什么了。向南,向南,娜蒂与艾丽丝见到了很多不同的人,经历了很多不同的故事,也一路披襟斩棘地击退了所有让艾丽丝不开心的人,最终发现自己想要的似乎是温暖的陪伴。为了这一个陪伴,娜蒂表露出了愿意放弃自己喜欢的生活的决心。在故事的结尾,娜蒂与艾丽丝本已隐于无名小镇,但是当艾丽丝看着娜蒂的眼睛认真地说出:“喜欢娜蒂发光的眼睛!”的时候,娜蒂又一次宠溺地笑了。于是,在连天的公路上,两个人再一次踏上了新的旅途。  
在pinterest上,娜蒂与艾丽丝<del>毫无争议地</del>被外国友人选进了best couple ever的名单...  
##注释与外部链接  
(日文)动画官网角色页