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