2017-12-31

? ? ? ? ? ? ? ? ? ? ? ?python爬蟲實(shí)戰(zhàn):爬取全站小說排行榜

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作者:黑黃條紋的野喵

? ? ? ?喜歡看小說的騷年們都知道,總是有一些小說讓人耳目一新,不管是仙俠還是玄幻,前面更了幾十章就成功圈了一大波粉絲,成功攀上飆升榜,熱門榜等各種榜,扔幾個(gè)栗子出來:


? ? ? ?新筆趣閣是廣大書友最值得收藏的網(wǎng)絡(luò)小說閱讀網(wǎng),網(wǎng)站收錄了當(dāng)前......我就不打廣告了(其他滿足下文條件的網(wǎng)站也行,之前已經(jīng)有做過簡(jiǎn)單爬取章節(jié)的先例了,但效果不太理想,有很多不需要的成分被留下了,來鏈接:http://python.jobbole.com/88560/。我們本文就爬取這個(gè)網(wǎng)站的上千本小說。重點(diǎn)在和大家一起分享一些爬蟲的思路和一些很常遇到的坑。

本文的行文脈絡(luò):
1、先構(gòu)造一個(gè)單本的小爬蟲練練手;
2、簡(jiǎn)要分享一下安裝MongoBD數(shù)據(jù)庫(kù)時(shí)的幾個(gè)易錯(cuò)問題;
3、運(yùn)用Scrapy框架爬取新筆趣閣全站排行榜。

一、爬取單本小說

? ? ? 爬取該網(wǎng)站相對(duì)來講還是很容易的,打開編輯器(推薦使用PyCharm,功能強(qiáng)大),首先引入模塊urllib.request(Python2.x的引入urllib和urllib2即可,待會(huì)我把2.x的也寫出來給大家看看),給出網(wǎng)站URL,寫下請(qǐng)求,再添加請(qǐng)求頭(雖然這個(gè)網(wǎng)站不封號(hào),但作者建議還是要養(yǎng)成每次都寫請(qǐng)求頭的習(xí)慣,萬一那天碰到像豆瓣似的網(wǎng)站,一不留神就把你封了)話不多說,直接上圖:

? ? ? 然后再將請(qǐng)求發(fā)送出去,定義變量response,用read()方法觀察,注意將符號(hào)解碼成utf-8的形式,省的亂碼:

? ? ? 打印一下看結(jié)果:

? ? ? 看到這么一大條就對(duì)嘍,對(duì)比一下網(wǎng)頁源碼,發(fā)現(xiàn)是一致的。

? ? ? 這步觀察很重要,因?yàn)檫@就說明該網(wǎng)站沒有使用AJAX異步加載,否則就要開始抓包的工作了,這個(gè)我們留著分析動(dòng)態(tài)網(wǎng)站時(shí)候再說。建議大家在沒有更好的方法時(shí)使用。之前記得確實(shí)有直接判斷的方法,然而一不小心忘記了,有知道的讀者還請(qǐng)發(fā)給我哦。

? ? ? 我們現(xiàn)在得到了網(wǎng)站的response,接下來就是對(duì)我們想要獲取的數(shù)據(jù)進(jìn)行解析、提取,但等等,考慮到我們要爬取大量小說,不搞一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)真是太失敗了,作者推薦MongoDB數(shù)據(jù)庫(kù),屬于NOSQL類型數(shù)據(jù)庫(kù),以文檔存儲(chǔ)為主,這里用來爬小說真是太適合不過了。但安裝起來需要一定的程序,想要試著做做的騷年可以參考一下下載和安裝教程,參考鏈接:http://blog.csdn.net/u011262253/article/details/74858211,在安裝好后為方便啟動(dòng),可以添加環(huán)境變量,但這里有個(gè)坑,你要先打開mongod(注意是mongodb,別一上來就打開mongo),然后需要準(zhǔn)確添加dbpath路徑,不然打開很容易就會(huì)失敗,上圖上圖:

失敗狀態(tài)
成功狀態(tài)

? ? ? 添加路徑后成功連接,出現(xiàn)waiting for connections on port 27017,則表示數(shù)據(jù)庫(kù)連接成功,而后就不要關(guān)掉這個(gè)終端了,只有保持?jǐn)?shù)據(jù)庫(kù)是連接的,才可運(yùn)行MongoDB數(shù)據(jù)庫(kù)(不然報(bào)錯(cuò)你都不知道自己是怎么死的)

? ? ? 好了,連接好數(shù)據(jù)庫(kù)后,我們將數(shù)據(jù)庫(kù)與編輯器進(jìn)行交互鏈接,位置很隱秘,在File>>Settings>>Plugins下添加組件Mongo Plugin,沒有就下載一個(gè):

盜個(gè)圖

? ? ? 我們?cè)诰庉嬈鲀?nèi)編寫代碼,引入Python專門用來與MongoDB交互的模塊pymongo,然后在最上面鏈接MongoDB數(shù)據(jù)庫(kù)的端口,默認(rèn)是27017,我們先創(chuàng)建一個(gè)叫做reading的數(shù)據(jù)庫(kù),然后在reading內(nèi)新建一個(gè)叫做sheet_words的數(shù)據(jù)表,代碼如下:

? ? ? 我們先找一個(gè)叫做《修羅武神》的小說來練練手,個(gè)人來講,我很討厭看小說時(shí)來回的翻頁,有時(shí)候還跳出廣告,這時(shí)候我還得返回去重新翻頁,作為一名懶得不行的懶人,我想到要是把整部小說放進(jìn)一個(gè)文檔里再看不就好了么,但要是一章一章的復(fù)制粘貼我想還是算了吧,這時(shí)候你就知道爬蟲是有多么便捷了。好,現(xiàn)在我們要做的是把《修羅武神》這部小說完整的爬取下來,并在數(shù)據(jù)庫(kù)中備份。我們回到剛才停留的地方,在得到response后,我們應(yīng)該選用一種方法來解析網(wǎng)頁,一般的方法有re,xpath,selector(css),建議新手使用xpath而不是re,一是因?yàn)閞e用不好很容易導(dǎo)致錯(cuò)誤,“當(dāng)你決定用正則表達(dá)式解決問題時(shí),你有了兩個(gè)問題?!?,相比較xpath才是步驟明確,十分穩(wěn)妥;二是在Firefox,Chrome等瀏覽器中可以直接復(fù)制xpath路徑,大大的減少了我們的工作量,上圖:

? ? ? 如果你決定使用xpath之后,我們需要從lxml中引入etree模塊,然后就可以用etree中的HTML()方法來解析網(wǎng)頁了,從網(wǎng)頁>檢察元素(F12)中復(fù)制下來我們所需數(shù)據(jù)的路徑,我選擇的是小說每章的標(biāo)題和內(nèi)容,上圖,上圖:

路徑//div[@class="readAreaBox content"]/h1/text()

路徑/html/body/div[4]/div[2]/div[2]/div[1]/div[2]/text()

注意注意,又來一個(gè)坑,當(dāng)你復(fù)制xpath時(shí)得到的是這個(gè)東東:
//div[@class="readAreaBox content"]/h1
和這個(gè)東東;
/html/body/div[4]/div[2]/div[2]/div[1]/div[2]

? ? ? 但你需要的是這個(gè)路徑里的文本text,故我們需要另外添加具體文本:/text(),然后就像上面那樣啦。上代碼,查數(shù)據(jù):

完整代碼見百度網(wǎng)盤:
鏈接:https://pan.baidu.com/s/1jHYNF86密碼:ho9d

? ? ? 小說有點(diǎn)大,一共是三千五百章,等個(gè)大約4-7分鐘吧,打開文件夾《修羅武神小說》,就可以看到我們下載好的無需翻頁的一整部小說,數(shù)據(jù)庫(kù)內(nèi)頁備份好了每章的鏈接,它自動(dòng)從零開始排的,就是說你要看第30章就得打開序號(hào)為29的鏈接,這個(gè)調(diào)一下下載時(shí)的順序就好了,作者很懶,想要嘗試下的讀者可以自行更改。

小說文本
?數(shù)據(jù)庫(kù)連接

? ? ? 看看,感覺還不錯(cuò)吧,好的小例子講完了,接下來我們準(zhǔn)備進(jìn)入正題。

? ? ? 我們要像上面的例子那樣爬取整個(gè)網(wǎng)站,當(dāng)然這里就不再建議使用普通的編輯器來來執(zhí)行了,聰明的讀者已經(jīng)發(fā)現(xiàn),一部小說爬了4分鐘,那么上千本不說,單單是一組排行榜里的100本就夠爬好一會(huì)了,這就顯示出Scripy框架的作用,用專門的Scripy框架寫工程類爬蟲絕對(duì)快速省力,是居家寫蟲的必備良藥哇。

二、爬取小說榜所有小說

? ? ? 首先安裝Scrapy的所有組件,建議除pywin32以外都用pip安裝,不會(huì)的話度娘吧,很簡(jiǎn)單的,pywin32需要下載與你所用Python版本相同的安裝文件。
來連接:https://sourceforge.net/projects/pywin32/

Scrapy插件安裝成功

? ? ? 然后還是老規(guī)矩,不想每次終端運(yùn)行都一點(diǎn)一點(diǎn)找路徑的話,就將根目錄添加到環(huán)境變量,然后打開終端,我們測(cè)試一下是否安裝成功:

?Scrapy安裝成功

? ? ? 好,安裝完畢后,打開終端,新建一個(gè)Scrapy工程,這里你可以根據(jù)索引,選擇使用Scrapy的各種功能,這里不一一詳解了,D盤內(nèi)已經(jīng)出現(xiàn)了我們建立好的Scrapy工程文件夾:

? ? ? 打開文件夾,我們會(huì)看到Scrapy框架已經(jīng)自動(dòng)在reading文件夾中放置了我們所需的一切原材料:

? ? ? 打開內(nèi)部reading文件夾,就可以在spiders文件夾中添加爬蟲py代碼文件了:

? ? ? 我們這里定向爬小說排行榜,除了我們寫的spider文件,還要在items.py中定義我們要爬取的內(nèi)容集,有點(diǎn)像詞典一樣,名字可以隨便取,但已有的繼承類scrapy.Item可不能改,這是Scrapy內(nèi)部自定義的類,改了它可找不到,spider就用我們上面抓取單本再加一個(gè)for循環(huán)就OK了,十分簡(jiǎn)單,一言不合就上圖:

爬蟲文件截圖
爬取的小說排行榜


每個(gè)排行榜上大約20本小說


每部小說的爬取情況(用的是.json格式)


小說顯示內(nèi)容

想要完整代碼的騷年們,見百度網(wǎng)盤鏈接:
items:
????鏈接:https://pan.baidu.com/s/1pKLMyWr
????密碼:3dee
Settings:
????鏈接:https://pan.baidu.com/s/1slkKQV7
????密碼:xn0u
Spider:
? ? 鏈接:https://pan.baidu.com/s/1nvBrrtf
? ? 密碼:76z8

? ? 至此,我們所需的數(shù)據(jù)就都爬取完了,它們都按照相應(yīng)的文件夾目錄放置好在相應(yīng)位置,適合條理性的觀看。對(duì)于本文內(nèi)容若有更好的提議、手法,望各位讀者大大們留言或加我微信,我們共同進(jìn)步哦:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評(píng)論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,312評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,410評(píng)論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,778評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,955評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,521評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,266評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,468評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,696評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評(píng)論 1 294
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,193評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,431評(píng)論 2 378

推薦閱讀更多精彩內(nèi)容

  • 對(duì)于“久有凌云志”的我來說,早起曾經(jīng)是一個(gè)理想,現(xiàn)在似乎是一個(gè)夢(mèng)想。 好像從上學(xué)時(shí),早起學(xué)習(xí)的我就在瞌睡...
    勤快壁立千仞閱讀 419評(píng)論 8 2
  • 【論廢舊青年的過季】01 邵禹第一次見到蔣黎是在城北的派出所 【論廢舊青年的過季】02 誰說沒有證據(jù)!他能證明!...
    半老徐喵閱讀 288評(píng)論 0 0
  • 畫筆知更炷,清音繞薄歡。 不知今昔何年,古言長(zhǎng)燈伴。 我曾鴻鵠之愿,不畏千辛萬難,夜夜不安眠。 星光惺忪盼,何時(shí)能...
    紫雨true閱讀 544評(píng)論 0 4