久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【含代碼】Python爬蟲實(shí)戰(zhàn):爬取全站小說排行榜

 長沙7喜 2018-01-22

作者:黑黃條紋的野喵    

簡書專欄:https://www.jianshu.com/u/7cabd1cbad0d


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



      

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


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


一,、爬取單本小說


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


     

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



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


     

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


    

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


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


失敗狀態(tài)


成功狀態(tài)


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


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



盜個(gè)圖


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



我們先找一個(gè)叫做《修羅武神》的小說來練練手,,個(gè)人來講,我很討厭看小說時(shí)來回的翻頁,,有時(shí)候還跳出廣告,,這時(shí)候我還得返回去重新翻頁,作為一名懶得不行的懶人,,我想到要是把整部小說放進(jìn)一個(gè)文檔里再看不就好了么,,但要是一章一章的復(fù)制粘貼我想還是算了吧,這時(shí)候你就知道爬蟲是有多么便捷了。好,,現(xiàn)在我們要做的是把《修羅武神》這部小說完整的爬取下來,,并在數(shù)據(jù)庫中備份。我們回到剛才停留的地方,,在得到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ù)庫內(nèi)頁備份好了每章的鏈接,它自動從零開始排的,,就是說你要看第30章就得打開序號為29的鏈接,,這個(gè)調(diào)一下下載時(shí)的順序就好了,作者很懶,,想要嘗試下的讀者可以自行更改,。


小說文本


 數(shù)據(jù)庫連接


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


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


二、爬取小說榜所有小說


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


Scrapy插件安裝成功


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


 Scrapy安裝成功


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




打開文件夾,,我們會看到Scrapy框架已經(jī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了,十分簡單,一言不合就上圖:


爬蟲文件截圖


爬取的小說排行榜


每個(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)位置,,適合條理性的觀看,。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多