專欄:006:實(shí)戰(zhàn)爬取博客

(起什么優(yōu)雅的名字點(diǎn)擊量會增多?)


系列爬蟲專欄

崇尚的學(xué)習(xí)思維是:輸入,輸出平衡,且平衡點(diǎn)不斷攀升。

曾經(jīng)有大神告誡說:沒事別瞎寫文章;所以,很認(rèn)真的寫的是能力范圍內(nèi)的,看客要是看不懂,不是你的問題,問題在我,得持續(xù)輸入,再輸出。

今天的主題是:實(shí)戰(zhàn)爬取. (涉及python文件操作,requests,BeautifulSoup,結(jié)構(gòu)化數(shù)據(jù))


1:框架

序號 內(nèi)容 解釋
01 內(nèi)容介紹 --
02 分解如何操作 --
03 參考及介紹 --

2:內(nèi)容介紹

  • 目標(biāo)
    抓取目標(biāo)網(wǎng)站的全部博文:
    01: 博文的鏈接
    02: 博文的標(biāo)題
    03: 博文的摘要

  • 由來

url = http://xlzd.me/
昨天在學(xué)習(xí)基于github搭建博客的時候,無意間查看到這個人的博客,里面也有好些python和爬蟲知識。xlzd雜談
進(jìn)一步發(fā)現(xiàn)是個羅粉。
你懂的。

  • 時間花銷
    一般寫一篇專欄,需要花費(fèi)80min,今天又是放假時間,所以效率不高,光從零開始寫代碼就花了60min。水平還是不夠。
    原則上,基本的爬蟲知識已經(jīng)快屬于我的舒適區(qū)。最近持續(xù)的專欄寫作,一系列的總結(jié),意味著,寫出的多,輸入的少,甚至寫完這個系列,會寫不出像樣的其他專欄...
    但我的理念是:持續(xù)精進(jìn)。
    所以,會盡快寫完這個系列,進(jìn)行輸入數(shù)據(jù)科學(xué)知識。

3:步驟分解

先總結(jié)下爬蟲的大概步驟是什么:

  1. 獲取url : 不管是自己構(gòu)造的符合要求的url還是抓取的url.
  2. 下載網(wǎng)頁源代碼:requests 或者 urllib模塊
  3. 對網(wǎng)頁源代碼進(jìn)行解析:re, BeautifulSoup系列,xpath系列等
  4. 結(jié)構(gòu)化數(shù)據(jù),存儲:本地,數(shù)據(jù)等
  • 原始:url
    http://xlzd.me/

查看網(wǎng)頁翻頁:

002.png

網(wǎng)頁源代碼:

003.png

得出網(wǎng)頁的組成特征:給出兩種自己構(gòu)造url的方法

# 方法1:
    def search_url_one(self):
        self.all_url = ["http://xlzd.me/page/{}/".format(i) for i in range(1, 8)]
        return self.all_url
        pass
# 方法2:
    def search_url_two(self):
        for one in range(1, 8):
            url = "http://xlzd.me/page/" + str(one) + '/'
            self.all_url.append(url)
        return self.all_url

當(dāng)然也可以自己在網(wǎng)頁中匹配,每抓取一頁,把下一頁的url抓取出來,總共7頁,抓最后一頁進(jìn)行判斷,說明這是最后一頁。

  • 對第一頁分析抓取的目標(biāo):
    文章的url
    文章的標(biāo)題
    文章的摘要
    網(wǎng)頁源代碼顯示:
004.png
all_title = Soup.find_all(class_="post-title")
all_abstract = Soup.find_all(class_="post-content")

# 上面已經(jīng)把所需要的目標(biāo)都容納下來了。
# 具體的url 和標(biāo)題 的匹配規(guī)則是:
for one_title in all_title:
    one_title.a.get('href'))  # 獲取 一個url
    one_title.get_text()      # 獲取 一個title

# 具體的摘要匹配規(guī)則是:
for one_abstract in all_abstract:
    one_abstract.get_text()   #獲取一個abstract

具體方法參考BeautifulSoup文檔

大概的任務(wù)已經(jīng)完成了。
一頁中有8篇文章,一共有7頁。
循環(huán)操作就可以實(shí)現(xiàn)抓取任務(wù)了。

  • 寫入文本操作
    具體要求是每篇文章的url,title,abstract 寫入一個文本中。
    剛開始我的想法是把title當(dāng)做 文本的名稱:
    如下顯示:
001.png

全部抓取的時候發(fā)現(xiàn)有些標(biāo)題不規(guī)則會出錯。所以進(jìn)行了簡化操作。
第一篇:1.txt
依次類推到最后一篇。

005.png
# 文本寫入總會出現(xiàn)編碼問題,注意下。
    def save(self, passage):
        global name
        for one in range(len(passage)):
            with codecs.open("Blog\\" + str(name) + ".txt", 'wb', encoding='utf-8') as f:
                f.write(passage[one]["url"])
                f.write("\n")
                f.write(passage[one]["title"])
                f.write("\n")
                f.write(passage[one]["abstract"])
                f.write("\n")
                name +=1

具體一篇的顯示如下:

006.png

結(jié)果:7頁網(wǎng)頁,1頁8篇文章,最后一頁只有1篇文章。

007.png

全部抓取完成。

獲取到的全部文章的url還可以進(jìn)行分析,比如如何把每篇文章的內(nèi)容都抓取下來。

代碼還可以進(jìn)行重構(gòu)。
你懂的。

4:參考及總結(jié)

大致流程走下來。爬蟲的整體思路應(yīng)該明朗了。

完整代碼:完整代碼

專欄地址

關(guān)于本人:

國內(nèi)小碩,半路出家的IT學(xué)習(xí)者。

興趣領(lǐng)域:爬蟲 , 數(shù)據(jù)科學(xué)

本人正在構(gòu)建一個共同成長爬蟲小型社群。有興趣私信
答疑及分享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容