自從去年年底開(kāi)始叫胖,走上了Jekyll+Github+Markdown這條不歸路,先是把CSDN上面的一些博客遷移過(guò)來(lái)她奥,然后就是經(jīng)常寫(xiě)一些自己在平時(shí)學(xué)習(xí)瓮增、開(kāi)發(fā)過(guò)程中的心得體會(huì),不見(jiàn)得有人看哩俭。權(quán)當(dāng)技術(shù)總結(jié)钉赁,外加練習(xí)寫(xiě)作表達(dá)了。
這種簡(jiǎn)潔優(yōu)雅的表達(dá)方式携茂,簡(jiǎn)直讓人沉醉你踩。不禁回想上大學(xué)(本科)時(shí),也曾折騰了一段時(shí)間Wordpress讳苦,當(dāng)時(shí)也寫(xiě)了一些內(nèi)容带膜、交了一些博友,可總有一種無(wú)病呻吟的感覺(jué)鸳谜,后來(lái)不想寫(xiě)了膝藕,也沒(méi)給服務(wù)器續(xù)費(fèi),就沒(méi)了咐扭。之后芭挽,就是偶爾在CSDN上面做一些總結(jié)滑废;可也沒(méi)有很認(rèn)真的對(duì)待。再后來(lái)袜爪,看了一些類(lèi)似“我為什么要寫(xiě)博客”這樣的文章蠕趁,覺(jué)得說(shuō)的很有道理,醍醐灌頂辛馆。于是俺陋,就在這兒安了家。我的朋友圈子里昙篙,幾乎沒(méi)有人寫(xiě)博客腊状;雖然“孤單”,我卻樂(lè)在其中苔可。有時(shí)興致來(lái)了缴挖,還把自己覺(jué)得不錯(cuò)的博文,在新建的公眾號(hào)推送一下焚辅。
我在Github上fork的這個(gè)博客模版醇疼,文章有categories和tags這兩個(gè)屬性,可是頁(yè)面展示出來(lái)的法焰,只有tags,而categories卻沒(méi)有做展示倔毙。那么埃仪,問(wèn)題來(lái)了!文章是需要有一個(gè)分類(lèi)的陕赃,而一個(gè)文章卻可能有多個(gè)標(biāo)簽卵蛉。就想著,能不能加一個(gè)分類(lèi)頁(yè)面么库,更好的為文章分類(lèi)傻丝。于是,就開(kāi)始看模版的代碼诉儒。據(jù)說(shuō)Jekyll使用的是Ruby葡缰,我對(duì)Ruby完全不了解,但是不同語(yǔ)言之間是有規(guī)律可循的忱反,這不泛释,我就發(fā)現(xiàn)了規(guī)律:tags頁(yè)面使用“for tag in site.tags”對(duì)標(biāo)簽進(jìn)行遍歷,于是我試了一下“for category in site.categories”温算,對(duì)分類(lèi)進(jìn)行遍歷然后就通了怜校。
這樣,事情就好辦了注竿。在Tags.md同級(jí)目錄(即網(wǎng)站根目錄)新建Categories.md,把tags替換成categories茄茁,代碼如下:
剩下的問(wèn)題就是魂贬,分類(lèi)頁(yè)面和標(biāo)簽頁(yè)面的樣式完全一樣,于是便有了下面的想法裙顽,打算做出來(lái)看看效果如何付燥。
大概思路是:
- 從Categories頁(yè)面抓取博客的所有分類(lèi),以及每個(gè)分類(lèi)下的文章(時(shí)間和標(biāo)題)
- 將抓取到的內(nèi)容保存到數(shù)據(jù)庫(kù)中(新建blog數(shù)據(jù)庫(kù)及表锦庸,字段title机蔗、create_time、content等)
- 從數(shù)據(jù)庫(kù)中查詢(xún)博客信息并做展示(此篇咱不分析甘萧,如有興趣請(qǐng)關(guān)注本博客后續(xù)的文章)
代碼如下:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import mysql.connector
url = 'http://blog.ybbz.site/Categories/'
html = urlopen(url)
bsObj = BeautifulSoup(html, 'lxml')
uls = bsObj.findAll('ul', {'class': 'listing'})
cate_list = []
for ul in uls:
cate = ul.h4.string
for li in ul.findAll('li'):
cate_list.append((str(cate), str(li.time.string), str(li.a.string)))
print(cate_list)
host = 'your hostname'
user = 'your username'
passwd = 'your password'
db = 'your database'
# connect database
conn = mysql.connector.connect(host=host, user=user, passwd=passwd, db=db)
cursor = conn.cursor()
# save blogs
sql = "insert into blog(category,create_time,title) values(%s, %s, %s)"
cursor.executemany(sql, cate_list)
conn.commit()