Python 爬蟲——爬取小說 | 探索白子畫和花千骨的愛恨情仇

發表於2017-09-09

知識就像碎布,記得“縫一縫”,你才能華麗麗地亮相。


1.Beautiful Soup

1.Beautifulsoup 簡介

此次實戰從網上爬取小說,需要使用到Beautiful Soup。
Beautiful Soup為python的第三方庫,可以幫助我們從網頁抓取資料。
它主要有如下特點:

  • 1.Beautiful Soup可以從一個HTML或者XML提取資料,它包含了簡單的處理、遍歷、搜尋文件樹、修改網頁元素等功能。可以通過很簡短地程式碼完成我們地爬蟲程式。
  • 2.Beautiful Soup幾乎不用考慮編碼問題。一般情況下,它可以將輸入文件轉換為unicode編碼,並且以utf-8編碼方式輸出,

2.Beautiful Soup安裝

win命令列下:

3.Beautiful Soup基礎

大家可以參考文件來學習(中文版的哦):

對於本次爬蟲任務,只要瞭解以下幾點基礎內容就可以完成:
1.Beautiful Soup的物件種類:

  • Tag
  • Navigablestring
  • BeautifulSoup
  • Comment

2.遍歷文件樹:find、find_all、find_next和children
3.一點點HTML和CSS知識(沒有也將就,現學就可以)

2.爬取小說花千骨

1.爬蟲思路分析

本次爬取小說的網站為136書屋。

先開啟花千骨小說的目錄頁,是這樣的。

1068837024-599c8e667e5f4_articlex

我們的目的是找到每個目錄對應的url,並且爬取其中地正文內容,然後放在本地檔案中。

2.網頁結構分析

首先,目錄頁左上角有幾個可以提高你此次爬蟲成功後成就感的字眼:暫不提供花千骨txt全集下載。

繼續往下看,發現是最新章節板塊,然後便是全書的所有目錄。我們分析的物件便是全書所有目錄。點開其中一個目錄,我們便可以都看到正文內容。

1068837024-599c8e667e5f4_articlex

按F12開啟審查元素選單。可以看到網頁前端的內容都包含在這裡。

1068837024-599c8e667e5f4_articlex

我們的目的是要找到所有目錄的對應連結地址,爬取每個地址中的文字內容。

有耐心的朋友可以在裡面找到對應的章節目錄內容。有一個簡便方法是點選審查元素中左上角箭頭標誌的按鈕,然後選中相應元素,對應的位置就會加深顯示。

1068837024-599c8e667e5f4_articlex

這樣我們可以看到,每一章的連結地址都是有規則地存放在<li>中。而這些<li>又放在<div id=”book_detail” class=”box1″>中。

1068837024-599c8e667e5f4_articlex

我不停地強調“我們的目的”是要告訴大家,思路很重要。爬蟲不是約pao,矇頭就上不可取。

3.單章節爬蟲

1068837024-599c8e667e5f4_articlex

剛才已經分析過網頁結構。我們可以直接在瀏覽器中開啟對應章節的連結地址,然後將文字內容提取出來。

1068837024-599c8e667e5f4_articlex

我們要爬取的內容全都包含在這個<div>裡面。

程式碼整理如下:

執行結果如下:

1068837024-599c8e667e5f4_articlex

這樣,單章節內容爬取就大功告成了。

4.小說全集爬蟲

單章節爬蟲我們可以直接開啟對應的章節地址解析其中的文字,全集爬蟲我們不可能讓爬蟲程式在每章節網頁內中跑一遍,如此還不如複製、貼上來的快。

我們的思路是先在目錄頁中爬取所有章節的連結地址,然後再爬取每個連結對應的網頁中的文字內容。說來,就是比單章節爬蟲多一次解析過程,需要用到Beautiful Soup遍歷文件樹的內容。

1.解析目錄頁

在思路分析中,我們已經瞭解了目錄頁的結構。所有的內容都放在一個所有的內容都放在一個<div id=”book_detail” class=”box1″>中。

1068837024-599c8e667e5f4_articlex

這兒有兩個一模一樣的<div id=”book_detail” class=”box1″>。

第一個<div>包含著最近更新的章節,第二個<div>包含著全集內容。

請注意,我們要爬取的是第二個<div>中的內容。

程式碼整理如下:

執行結果如圖:

1068837024-599c8e667e5f4_articlex

2.爬取全集內容

將每個解析出來的連結迴圈代入到url中解析出來,並將其中的文字爬取出來,並且寫到本地F:/huaqiangu.txt中。
程式碼整理如下:

執行結果顯示 [Finished in 32.3s] 。

開啟F盤檢視花千骨檔案。

1068837024-599c8e667e5f4_articlex

爬蟲成功。備好紙巾,快快去感受尊上和小骨的虐戀吧。

5.總結

程式碼還有很多改進的地方。例如文字中包含廣告的js程式碼可以去除,還可以加上爬蟲進度顯示等等。實現這些功能需要包含正規表示式和os模組知識,就不多說了,大家可以繼續完善。


碼字辛苦,碼程式碼費神,文字和程式碼同碼更是艱辛無比。如果您覺得文章有那麼一丟丟價值,請不要吝嗇您的讚賞。

相關文章