banner
阿珏酱

阿珏酱

いつもとは逆の電車に乗り、見たこともない風景を見に行く
twitter
github
facebook
bilibili
zhihu
steam_profiles
youtube

很抱歉,我回來了!

那是一個月黑風高、風雨交加、伸手不見五指的黑夜,冥冥之中好似要發生點什麼

因為出了個 "意外" 再加上疫情原因,我一度變成了 "植物人",差點去了二次元,好在 "搶救" 回來了。這幾年找我的消息我也收不到了,感謝那些還在和關心我的人,謝謝。

錯的並不是我,而是這個冥冥之中注定的世界

這些年找我的人和事,我也全部不知道,QQ、微信一些消息太久也都收不到了
imageimage
image
看到我多年未亮起的頭像重新亮了起來,不少朋友都來問我怎麼回事。
很感謝那些素未謀面的網友,或許叫朋友更親切些,你們還一直惦記著我,讓我很是感動。

一找就是找了我三年
image
image
image
image
滿世界的找我
image

感動的不要不要的
下面才是正文

關於博客#

博客首次建成時間是 2016-06-09,如今已經成立了快 8 年之久了,在各種災難中也頑強的生存了下來
期間也認識了好多好多的小夥伴,一起討論,一起進步,一起成長。所以我並不想讓博客就此消失
image
博客數據的原本有自動備份到七牛雲的,但直到現在才知道,備份不知道什麼原因,19 年 10 月份左右就停掉了
都說互聯網是有記憶的,本著 “頭可斷血可流,數據不能丟” 的精神,我在茫茫網絡中尋找數日,終究還是讓我找到了博客的網站存檔。 可以點擊這裡去看我的博客歷史版本archive (國外著名的網站檔案館項目)

於是就寫了個 Python 腳本把文章和評論數據給爬下來了。
爬完後我發現有人已經給我備份了(我博客之前是別人贊助的三年)
image
image

博客搬遷#

博客搬遷到博客園,其實也是不得已而為之

博客的原域名(52ecy.cn,moeins.cn,moeins.com)在到期後被人搶注,溝通無果後,一時半會是拿不回來的了
迫無無奈吧,只能暫且先將博客搬遷到博客園來(之後是否在自建的話再做打算吧)。另一方面也可能是現在沒有太多閒時間來折騰自己的系統,放在博客園反倒是更加省心省力。但是評論就沒那麼方便了,需要登錄才可以發表評論,當然有啥問題也可以直接在群里 @我

其實早在 18 年底的時候,我就已經有想換主題的想法了 ->這下真鴿了 (我可真能拖,太佩服我自己了)
無奈之前的 emlog 系統沒有合適現成的,自己又懶著移植,便一直一拖再拖。

原來那個主題我一直就想換掉了,因為不太好看,沒有個性,就是規規矩矩的,並不符合我的個性和風格
但是呢,我審美雖然特別棒,但你要讓我自己寫一套符合我審美的主題出來那就是有點困難了

後來突然看到博客園用戶不忘編碼的博客,心想博客園還支持這樣自己美化。
一句 “我又不想他博客從此也失聯,無法訪問打開” 後便決定暫時先搬遷到博客園再說吧。
img

一直就想換這種二次元風格的主題了
目前此博客美化風格樣式基於櫻花莊的白貓的 WordPress 主題 Sakura,不忘編碼移植,但 BUG 和細節問題較多,我又花了兩天優化了一下,但也好多頁面沒優化,之後再慢慢來吧 (能明天在做的事為什麼不留給明天的我去做呢)

由於之前的 emlog 博客使用的是 HTML 的 TinyMCE 編輯器,而且還是很老的版本,所以生成的文章的 HTML 代碼也是相當的混亂,所以搬遷至博客園的 markdown 格式的時候出現了很多的樣式不兼容問題,我也已經盡可能的修復了一些,但也沒法保證所有文章都能正常的顯示,看到的話再慢慢修吧

博客園不支持自建博客系統的一鍵搬遷功能,所以文章的發佈時間和評論的信息就不能一同搬遷了,但我又想保留原汁原味,所以我就一併寫到文章當中了,私密評論也還是隱藏了。
(自建博客系統的問題也和博客園團隊溝通了,說後期開發會加上,也不為難他們了,他們也入不敷出了,文章的發佈使用了 Cnblog 的 VScode 插件)

友情鏈接我也單獨搞了一個頁面給搬遷過去了,但也很多友鏈的網站也已經無法訪問了,有的也已經下掉友鏈了。
現在的我也不是獨立域名了,都不好意思再去申請友鏈了.....

之前博客的所有圖片都是存在新浪的,一直擔心哪天又給丟了,所以平常都是一份七牛雲,一份新浪,現在也全部給搬遷到博客園來了

我為什麼要寫博客?#

有人會覺得這些有這麼重要嗎?
有時候我也是想說點什麼,想寫點什麼,但又沒人說,沒地方寫,就是需要那麼一個地方
我做博客也不是為了什麼流量啊,賺錢之類的,就想搞一片自己的小天地,在自己的小圈子裡瞎混哒
也許也正因這一份熱愛,所以我才能慢慢堅持下來,奈何事與願違,出了點意外

以前好多博客圈的朋友都要麼不見了,要麼都不更新了,真的好可惜啊,我都還沒來得及認識他們 (尤其是月宅那貨)

@寒穹那貨還說我:“阿珏,那麼久了怎麼還那麼二刺螈”。
我想這麼多年間,一直沒變的就是我了吧。

很高興,也很感謝還有那麼多人記得我,對我那麼好。
img

好像不該發這麼多圖片的
紀念逝去的博客,永遠活在我的 127 裡
img

Python 代碼#

搬遷的 Python 的代碼,雖然沒啥用,但算是記錄一下,供有需要的人學習學習

點擊查看代碼
import os
import re
import time
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs

# 指定文件路徑
file_path = "C:\\Users\\Administrator\\Desktop\\blog\\content.txt"
save_folder = "C:\\Users\\Administrator\\Desktop\\blog\\content\\"

def save_to_file(data, file_name):
    try:
        file_path = os.path.join(save_folder, file_name + ".txt")
        with open(file_path, 'a', encoding='utf-8') as file:
            file.write(data)
        print("數據已成功保存到文件:", file_path)
    except Exception as e:
        print("保存文件時出錯:", e)


def remove_html_tags(text):
    soup = BeautifulSoup(text, 'html.parser')
    return soup.get_text()


def comment(html_content):
    comment_matches = re.findall(r'<div class="comment (.*?)" id="comment-\d+">[\s\S]*?<img .*?inal=".*?202.*?/([^"]+)"/>[\s\S]*?<div ' +
                                 'class="comment-content">(.*?)</div>[\s\S]*?itle=".*?">(.*?)</span>[\s\S]*?<span class="comment-time">(.*?)</span>',
                                 html_content, re.DOTALL)
    article_comments = ''
    if comment_matches:
        i = 0
        for comment_match in comment_matches:
            if 'comment-children' in comment_match[0]:
                i += 1
                is_reply_comment = '>' * i
            else:
                is_reply_comment = '>'
                i = 1

            #頭像 大小控制在40
            # 兼容gravatar頭像 https://secure.gravatar.com/avatar/ 
            if 'gravatar.com' in comment_match[1]:
                avatar_url = '![](' + str(re.sub(r'(\?|&)s=\d+', '\\1s=40', str(comment_match[1]))) + ')    ' 
            else: 
                parsed_url = urlparse(comment_match[1])
                query_params = parse_qs(parsed_url.query)
                dst_uin = query_params.get('dst_uin', ['1638211921'])
                avatar_url = '![]('+'https://q1.qlogo.cn/g?b=qq&nk='+str(dst_uin[0])+'&s=40'+')    '   

            comment_content = comment_match[2].strip()  
            nickname = comment_match[3].strip()  
            comment_time = comment_match[4].strip()  
            link_url = re.search(r'030.*?/(.*?)" .*? rel', nickname)  

            # 構造評論的markdown格式
            comment_content = is_reply_comment + comment_content.replace('\n', '>')
            comment_content = comment_content.replace('##這篇評論是私密評論##', '[#這篇評論是私密評論#]')

            # 替換表情圖片
            soup = BeautifulSoup(comment_content, 'html.parser')
            for img in soup.find_all('img'):
                title_text = img.get('title', '')
                img.replace_with('[#'+title_text+']')

            comment_content = soup.get_text()

            # 保存評論用戶的URL地址
            if link_url:
                nickname = '['+remove_html_tags(nickname)+']'
                link_url = '(' + link_url[1] + ')   '
            else:
                link_url = ''
                nickname = remove_html_tags(nickname) + '   '

            if i == 1:
                article_comments += '\n'

            article_comments += is_reply_comment + avatar_url + nickname + link_url + comment_time + '\n' + comment_content + '\n'

        return article_comments
    else:
        return ''


def process_article(url):
    print("目前執行===="+url)
    response = requests.get(url)

    if response.status_code == 200:
        html_content = response.text
        soup = BeautifulSoup(html_content, 'html.parser')
        article_title = soup.find('h1', class_='article-title') 
        article_mate = soup.find('div', class_='article-meta') 
        article_article = soup.find('article', class_='article-content') 

        soup_content = BeautifulSoup(article_article.prettify(), 'html.parser')
        img_tags = soup_content.find_all('img')
        pattern = r"https://web.*?_/"
        
        for img_tag in img_tags:
            if 'data-original' in img_tag.attrs:
                original_url = img_tag['data-original']
            else:
                original_url = img_tag['src']

            cleaned_url = re.sub(pattern, '', original_url)
            new_url = 'https://image.baidu.com/search/down?url=' + cleaned_url
            img_tag['src'] = new_url
            del img_tag['data-original']

        article_comment = soup.find('div', class_='article_comment_list') 
        data = "###### `當你看到這個提示的時候,說明當前的文章是由原emlog博客系統搬遷至此的,文章發佈時間已過於久遠,編排和內容不一定完整,還請諒解`\n\n" + '###' + article_title.text.strip()+'\n\n'+article_mate.text.strip().replace('\n', '').replace('\r', '').replace('\t', '')+'\n' + soup_content.prettify().replace('<article class="article-content">', '').replace('</article>', '')

        save_to_file(data + '\n網友評論:\n\n', article_title.text.strip())

        data = comment(html_content)

        if not data:
            return

        save_to_file(data, article_title.text.strip())

        if article_comment:
            comment_links = re.findall(r'<a\s+href="(.*?)nts"', str(article_comment))

            if comment_links:
                print('有分頁評論數據')
                for link in comment_links:
                    url = link +"nts"
                    print(url)
                    response = requests.get(url)

                    if response.status_code == 200:
                        html_content = response.text
                        data = comment(html_content)
                        if not data:
                            return
                        save_to_file(data, article_title.text.strip())
                        print("寫分頁評論數據中")
    else:
        print("無法獲取網頁。")


def main():
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            segments = line.strip().split("----")

            if len(segments) > 0:
                url = segments[0]  
                process_article(url)
            else:
                print("在這一行中未找到URL。")
            print('開啟下一篇文章')
            time.sleep(4)

if __name__ == "__main__":
    main()

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。