摘要:本文將通過(guò)來(lái)爬取豆瓣編程類(lèi)評(píng)分大于的書(shū)籍。下圖是最終的結(jié)果下面進(jìn)入正題一采集源分析首先我們找到豆瓣的編程類(lèi)書(shū)籍網(wǎng)址編程進(jìn)入網(wǎng)址之后我們翻到最下面的分頁(yè)導(dǎo)航通過(guò)分析分頁(yè)地址我們可以得出偏移量這個(gè)地址則是我們要采集的內(nèi)容。
下圖是最終的結(jié)果:
首先我們找到豆瓣的編程類(lèi)書(shū)籍網(wǎng)址:
https://book.douban.com/tag/編程
進(jìn)入網(wǎng)址之后我們翻到最下面的分頁(yè)導(dǎo)航:
通過(guò)分析分頁(yè)地址我們可以得出:
https://book.douban.com/tag/%...{偏移量}&type=T
這個(gè)地址則是我們要采集的內(nèi)容。第一頁(yè) start = 0,第二頁(yè) start = 20 ... 以此類(lèi)推。
找到了要采集的 URL 之后,接下來(lái)就是分析我們真正需要的數(shù)據(jù)在 HTML 文檔中的位置。
F12 打開(kāi)控制臺(tái)發(fā)現(xiàn),這些 li 標(biāo)簽正是我們的目標(biāo)內(nèi)容。
而書(shū)名、評(píng)論、評(píng)分分別對(duì)應(yīng)li 下面的 h2 標(biāo)簽、class 為 rating_nums 的 span 標(biāo)簽, class 為 pl 的 span 標(biāo)簽。
見(jiàn)下圖:
有了以上內(nèi)容,那么我們很容易就有了思路:
抓取頁(yè)面上所有的 li 標(biāo)簽
循環(huán)處理這里 li 標(biāo)簽,找到我們所需的三個(gè)內(nèi)容,并存儲(chǔ)到列表中
根據(jù)評(píng)分排序
保存數(shù)據(jù)到 csv
二、依賴(lài)的包:除了上次使用到的 requests, BeautifulSoup, 還增加了幾個(gè)包。
re 正則表達(dá)式處理
numpy 很強(qiáng)大的數(shù)據(jù)處理庫(kù),因?yàn)楸疚囊M(jìn)行排序,所以使用這個(gè)包會(huì)很方便
csv 用于把最終的結(jié)果保存到csv中
time 這里主要用到了 sleep 功能
三、編碼首先我們定義一個(gè) get 函數(shù),接受一個(gè)頁(yè)碼,表示要爬取到多少頁(yè)。
這個(gè)函數(shù)的主要功能就是抓取指定頁(yè)碼所有的書(shū)的信息,包括書(shū)名、評(píng)分、評(píng)論數(shù)。并且保存到一個(gè)二維數(shù)組中。
代碼解讀:
因?yàn)槎拱甑姆猪?yè)是根據(jù) URL 中的 start 參數(shù)(相當(dāng)于偏移量)來(lái)分的,所以在剛開(kāi)始定義了一個(gè) offset 變量,根據(jù)我們傳入的頁(yè)碼來(lái)計(jì)算正確的 start 參數(shù)的值。
后面通過(guò) find_all 方法獲取所有的 li 對(duì)象,存入 book_info_list 列表中,那么接下來(lái)就是遍歷這個(gè)列表,從每一個(gè)元素中得到 star、 title、comment 三個(gè)變量。最終得到一個(gè)二維數(shù)組 result。
定義排序方法,接收上面得出的 result 變量,并且將這個(gè)列表根據(jù)評(píng)分來(lái)排序。
將最終排好的數(shù)據(jù)寫(xiě)入 csv 中。
四、總結(jié)以上則是我們爬取豆瓣的小案例,有經(jīng)驗(yàn)的朋友們會(huì)發(fā)現(xiàn)這個(gè)案例有很大的不足之處。
在運(yùn)行這個(gè)程序的時(shí)候,我們會(huì)發(fā)現(xiàn)會(huì)非常緩慢。原因就是每次請(qǐng)求豆瓣的分頁(yè) URl 之后,接下來(lái)緊跟著一條龍的獲取書(shū)名等操作,獲取完這個(gè)頁(yè)面的所有數(shù)據(jù)之后再接著抓取下一個(gè)分頁(yè)頁(yè)面。也就是完全同步的編碼方式。所以慢是必然的。
那么如何調(diào)整代碼結(jié)構(gòu)才能使程序運(yùn)行迅速呢?
這里介紹一個(gè)簡(jiǎn)單又常用的方法:
我們可以采用多線程技術(shù),python 的 threading 包是專(zhuān)門(mén)用于多線程處理的。采用這種方式又多增加了兩個(gè)包:
threading
queue
可以將上述代碼的下載分頁(yè) URL 部分代碼放入一個(gè)多帶帶的線程去跑,并將下載好的 HTML 文檔存入一個(gè)隊(duì)列中。然后多開(kāi)幾個(gè)線程去隊(duì)列中讀取數(shù)據(jù),并用 BS4 來(lái)分析,將分析得到的 list 數(shù)據(jù)結(jié)構(gòu)追加到外部的另一個(gè)list 中。最后再去排序這另一個(gè)列表。
獲取源碼請(qǐng)到:“ 后端漫談 ” 公眾號(hào)后臺(tái)回復(fù) “douban”。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42586.html
摘要:另外由于豆瓣上一些電影評(píng)分?jǐn)?shù)量太少而不顯示,所以這里的電影數(shù)量會(huì)和票房數(shù)量有所差異。月度票房將類(lèi)型片的票房按月劃分,得到了這張圖。 去年末的時(shí)候,我招收了新的 實(shí)訓(xùn)生 。本文是其中一位 @齊大圣 同學(xué)在實(shí)訓(xùn)兩個(gè)月時(shí)完成的項(xiàng)目案例。(碼上行動(dòng)群里同學(xué)應(yīng)該都看過(guò)這個(gè)名字,現(xiàn)在也是助教之一。)項(xiàng)目最初的想法是, 從互聯(lián)網(wǎng)上的公開(kāi)信息中采集2018年在國(guó)內(nèi)上映電影的票房、評(píng)分、類(lèi)型、演員等信息...
摘要:今天為大家整理了個(gè)爬蟲(chóng)項(xiàng)目。地址新浪微博爬蟲(chóng)主要爬取新浪微博用戶(hù)的個(gè)人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進(jìn)行登錄,可通過(guò)多賬號(hào)登錄來(lái)防止新浪的反扒。涵蓋鏈家爬蟲(chóng)一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...
摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評(píng)分書(shū)的質(zhì)量沒(méi)的說(shuō),推薦大家好好看一下。推薦,豆瓣評(píng)分,人評(píng)價(jià)本書(shū)介紹了在編程中條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開(kāi)發(fā)人員每天所面臨的問(wèn)題的解決方案。 很早就想把JavaGuide的書(shū)單更新一下了,昨晚加今天早上花了幾個(gè)時(shí)間對(duì)之前的書(shū)單進(jìn)行了分類(lèi)和補(bǔ)充完善。雖是終極版,但一定還有很多不錯(cuò)的 Java 書(shū)籍我沒(méi)有添加進(jìn)去,會(huì)繼續(xù)完善下去。希望這篇...
摘要:概述在前面兩篇爬蟲(chóng)學(xué)習(xí)之基于的網(wǎng)絡(luò)爬蟲(chóng)和爬蟲(chóng)學(xué)習(xí)之簡(jiǎn)單的網(wǎng)絡(luò)爬蟲(chóng)文章中我們通過(guò)兩個(gè)實(shí)際的案例,采用不同的方式進(jìn)行了內(nèi)容提取。 概述 在前面兩篇(爬蟲(chóng)學(xué)習(xí)之基于Scrapy的網(wǎng)絡(luò)爬蟲(chóng)和爬蟲(chóng)學(xué)習(xí)之簡(jiǎn)單的網(wǎng)絡(luò)爬蟲(chóng))文章中我們通過(guò)兩個(gè)實(shí)際的案例,采用不同的方式進(jìn)行了內(nèi)容提取。我們對(duì)網(wǎng)絡(luò)爬蟲(chóng)有了一個(gè)比較初級(jí)的認(rèn)識(shí),只要發(fā)起請(qǐng)求獲取響應(yīng)的網(wǎng)頁(yè)內(nèi)容,然后對(duì)內(nèi)容進(jìn)行格式化存儲(chǔ)。很多時(shí)候我們抓取到的內(nèi)容...
閱讀 2599·2021-09-22 15:41
閱讀 1522·2021-08-19 10:54
閱讀 1856·2019-08-23 15:11
閱讀 3454·2019-08-23 10:23
閱讀 1500·2019-08-22 16:28
閱讀 852·2019-08-22 15:11
閱讀 789·2019-08-22 14:53
閱讀 772·2019-08-22 13:49