2020年7月

上个月发邮件说8月就不提供ovz了,要我换服务器。
2020-07-11T04:21:39.png
这个服务器是之前一个特价套餐,配置很烂,唯一的优点是硬盘大,所以也就一直续费到了明年。
对大硬盘的需求来自于下载/上传一些大文件,另外对网络稍微有一点要求,最终定的这个。

服务器面板如下,常年加载极慢:
2020-07-11T04:05:20.png
基础配置如下:
2020-07-11T04:13:43.png
是不是看起来还不错,实际上平时使用完全达不到这个速度。
I/O常年10-20的样子,至于这次测出来这么高,估计是因为我邻居都迁移了。

最后我选了个SSD,NVEM空间实在是太小了,截至下次付费前不用补差价,后面续费才需要。
如果需要,也就比之前多10刀。
2020-07-11T04:22:54.png

备份记录

嗯,乱七八糟。。
2020-07-11T04:25:46.png

貌似有些大文件
2020-07-11T04:26:34.png
2020-07-11T04:27:55.png

emm,这都两年多了,是时候说再见了!
2020-07-11T04:31:22.png

差不多了,备份下剩下的脚本,网站配置什么的就可以了。
2020-07-11T04:33:18.png

这个应该是慕课网的免费课程下载脚本,都忘了什么怎么搞的了。
2020-07-11T04:36:11.png
2020-07-11T04:37:37.png

整理之后压缩就这么点了
2020-07-11T04:44:26.png

最终备份结束
2020-07-11T04:48:20.png

数据清除+重置系统
2020-07-11T04:52:02.png
2020-07-11T04:51:34.png

结束

好像面板重装功不能用了,rm -rf *
2020-07-11T04:56:46.png

关机拜拜!

无聊,瞎写点

算是一个练习

之前都是用的BeautifulSoup来提取需要的信息,相对来说操作简单,但是需要这个额外的库有时候感觉还是比较慢。

之前也知道python内置了HTMLParser,可以用来解析html,但是一直没用过,这次用这个来做。

关键目标

  • 尽量保持原有对齐
  • mediainfo分离
  • 图片

实现代码

直接上代码了。

from html.parser import HTMLParser

class THTMLParser(HTMLParser):

    def __init__(self):
        super(THTMLParser, self).__init__()
        self.brflag = 0
        self.qflag = None
        self.imgtag = None
        self.xtag = False
        self.recording = False
        self.record_step = 0 # 抽取进入的深度
        self.record_data = []

    def handle_starttag(self, tag, attrs):
        if tag == "legend":
            # 跳过 legend
            self.recording = False
        if tag == "x":
            self.xtag = True
        if tag == "div":
            if self.recording is True:
                self.record_step += 1
            for key, value in attrs:
                if key == "id" and value == "kdescr":
                    self.recording = True # 开始记录
                    self.record_step += 1 # 步进步数
                    break
        if tag == "fieldset":
            if self.recording is True:
                self.record_step += 1
            if self.qflag is None:
                self.qflag = "quote_start"

    def handle_endtag(self, tag):
        if tag == "legend":
            self.recording = True
            return
        if self.recording is True:
            self.record_step -= 1
            # 回退到起始tag 则说明要抽取的部分遍历结束了
            if self.record_step == 0:
                self.recording = False
        # if self.xtag is True:
        #     self.xtag = False
        if tag == "fieldset" and self.qflag == "find_next":
            self.record_data[-1] += "[/quote]"
            self.qflag = None

    def handle_startendtag(self, tag, attrs):
        if self.recording is False:
            return
        # 处理 <tagname /> 这种形式的tag
        if tag == "br":
            if self.brflag != 0:
                if len(self.record_data) > 0:
                    if len(self.record_data[-1]) > 0 and self.record_data[-1][-1] != "\n":
                        self.record_data[-1] += "\n"
                self.brflag = 0
            self.brflag += 1
        if tag == "hr":
            if self.qflag is None:
                self.qflag = "quote_start"
            if self.qflag == "find_next":
                self.record_data[-1] += "[/quote]"
                self.qflag = None
        if tag == "img":
            for key, value in attrs:
                if key == "src":
                    text = f"[img]{value}[/img]"
                    self.record_data.append(text)

    def handle_data(self, data: str):
        if self.recording is True:
            # 这里没有处理 \u3000 即全角空白 因为全角空白可以对齐
            text = data.strip("\n\t").replace("\xa0", " ")
            if text != "":
                if self.brflag == 1:
                    self.brflag = 0
                if self.xtag is True:
                    self.record_data[-1] += text
                    self.xtag = False
                else:
                    if self.qflag == "quote_start":
                        text = "[quote]" + text
                        self.qflag = "find_next"
                    self.record_data.append(text)
                if self.record_data[-1] in ["Video", "Audio", "Other"]:
                    self.record_data[-1] = "\n" + self.record_data[-1]

    def handle_comment(self, data):
        pass
        # print('<!--', data, '-->')

    def handle_entityref(self, name):
        pass
        # print('&%s;' % name)

    def handle_charref(self, name):
        pass
        # print('&#%s;' % name)

if __name__ == "__main__":
    with open(r"torrent.html", "r", encoding="utf-8") as f:
        content = f.read()
    parser = THTMLParser()
    parser.feed(content)
    with open(r"torrent.md", "w", encoding="utf-8") as f:
        content = f.write("\n".join(parser.record_data))

提取效果预览

2020-07-05T10:24:53.png