一、目標(biāo)
排行榜的地址:http://www.qu.la/paihangbang/
找到各類(lèi)排行旁的的每一部小說(shuō)的名字,和在該網(wǎng)站的鏈接。
二、觀察網(wǎng)頁(yè)的結(jié)構(gòu)

很容易就能發(fā)現(xiàn),每一個(gè)分類(lèi)都是包裹在:

之中,
這種條理清晰的網(wǎng)站,大大方便了爬蟲(chóng)的編寫(xiě)。
在當(dāng)前頁(yè)面找到所有小說(shuō)的連接,并保存在列表即可。
三、列表去重的小技巧:
就算是不同類(lèi)別的小說(shuō),也是會(huì)重復(fù)出現(xiàn)在排行榜的。
這樣無(wú)形之間就會(huì)浪費(fèi)很多資源,尤其是在面對(duì)爬大量網(wǎng)頁(yè)的時(shí)候。
這里只要一行代碼就能解決:

這里調(diào)用了一個(gè)list的構(gòu)造函數(shù)set:這樣就能保證列表里沒(méi)有重復(fù)的元素了。
四、代碼實(shí)現(xiàn)
模塊化,函數(shù)式編程是一個(gè)非常好的習(xí)慣,堅(jiān)持把每一個(gè)獨(dú)立的功能都寫(xiě)成函數(shù),這樣會(huì)使代碼簡(jiǎn)單又可復(fù)用。
1.網(wǎng)頁(yè)抓取頭:

2.獲取排行榜小說(shuō)及其鏈接:
爬取每一類(lèi)型小說(shuō)排行榜,
按順序?qū)懭胛募?/p>
文件內(nèi)容為 小說(shuō)名字+小說(shuō)鏈接
將內(nèi)容保存到列表
并且返回一個(gè)裝滿url鏈接的列表


3.獲取單本小說(shuō)的所有章節(jié)鏈接:
獲取該小說(shuō)每個(gè)章節(jié)的url地址,并創(chuàng)建小說(shuō)文件

4.獲取單頁(yè)文章的內(nèi)容并保存到本地
這里有個(gè)小技巧:
從網(wǎng)上爬下來(lái)的文件很多時(shí)候都是帶著
之類(lèi)的格式化標(biāo)簽,
可以通過(guò)一個(gè)簡(jiǎn)單的方法把它過(guò)濾掉:
html = get_html(url).replace('
', '\n')
這里單單過(guò)濾了一種標(biāo)簽,并將其替換成‘\n’用于文章的換行,

6.主函數(shù)

7.輸出結(jié)果


5.缺點(diǎn):
本次爬蟲(chóng)寫(xiě)的這么順利,更多的是因?yàn)榕赖木W(wǎng)站是沒(méi)有反爬蟲(chóng)技術(shù),以及文章分類(lèi)清晰,結(jié)構(gòu)優(yōu)美。
但是,按照這篇文的思路去爬取小說(shuō),
大概計(jì)算了一下:
一篇文章需要:0.5s
一本小說(shuō)(1000張左右):8.5分鐘
全部排行榜(60本):8.5小時(shí)!
那么,這種單線程的爬蟲(chóng),速度如何能提高呢?
自己寫(xiě)個(gè)多線程模塊?
其實(shí)還有更好的方式:Scrapy框架
后面可將這里的代碼重構(gòu)一邊遍,
速度會(huì)幾十倍甚至幾百倍的提高了!
這其實(shí)也是多線程的威力!
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4406瀏覽量
66845 -
爬蟲(chóng)
+關(guān)注
關(guān)注
0文章
87瀏覽量
7951
原文標(biāo)題:爬蟲(chóng)實(shí)踐---一次下完所有小說(shuō):排行榜小說(shuō)批量下載
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
HarmonyOS開(kāi)發(fā)案例:【排行榜頁(yè)面】

爬蟲(chóng)實(shí)踐:批量下載所有排行榜小說(shuō)
評(píng)論