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

时间:2022-12-30 10:11:25

其一,代码内容


用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的名单...
##注释与外部链接
(日文)动画官网角色页

注:页面来自萌娘百科——娜蒂


最后吐槽一下,为什么我写md文件都这么难看……