亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python爬蟲案例:抓取豆瓣編程類高評(píng)分書籍

SunZhaopeng / 1989人閱讀

摘要:本文將通過(guò)來(lái)爬取豆瓣編程類評(píng)分大于的書籍。下圖是最終的結(jié)果下面進(jìn)入正題一采集源分析首先我們找到豆瓣的編程類書籍網(wǎng)址編程進(jìn)入網(wǎng)址之后我們翻到最下面的分頁(yè)導(dǎo)航通過(guò)分析分頁(yè)地址我們可以得出偏移量這個(gè)地址則是我們要采集的內(nèi)容。

對(duì)于很多正在學(xué)習(xí)計(jì)算機(jī)的朋友來(lái)說(shuō),選擇合適的學(xué)習(xí)材料是非常重要的。
本文將通過(guò) Python 來(lái)爬取豆瓣編程類評(píng)分大于 9.0 的書籍。
此案例很適合入門爬蟲的朋友學(xué)習(xí),總共也就 3 個(gè)函數(shù)。

下圖是最終的結(jié)果:

下面進(jìn)入正題:
一、采集源分析:

首先我們找到豆瓣的編程類書籍網(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 ... 以此類推。

找到了要采集的 URL 之后,接下來(lái)就是分析我們真正需要的數(shù)據(jù)在 HTML 文檔中的位置。

F12 打開控制臺(tái)發(fā)現(xiàn),這些 li 標(biāo)簽正是我們的目標(biāo)內(nèi)容。

書名、評(píng)論、評(píng)分分別對(duì)應(yīng)li 下面的 h2 標(biāo)簽、class 為 rating_nums 的 span 標(biāo)簽, class 為 pl 的 span 標(biāo)簽。

見下圖:

有了以上內(nèi)容,那么我們很容易就有了思路:

抓取頁(yè)面上所有的 li 標(biāo)簽

循環(huán)處理這里 li 標(biāo)簽,找到我們所需的三個(gè)內(nèi)容,并存儲(chǔ)到列表中

根據(jù)評(píng)分排序

保存數(shù)據(jù)到 csv

二、依賴的包:

除了上次使用到的 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è)碼所有的書的信息,包括書名、評(píng)分、評(píng)論數(shù)。并且保存到一個(gè)二維數(shù)組中。



代碼解讀:

因?yàn)槎拱甑姆猪?yè)是根據(jù) URL 中的 start 參數(shù)(相當(dāng)于偏移量)來(lá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ù)寫入 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)緊跟著一條龍的獲取書名等操作,獲取完這個(gè)頁(yè)面的所有數(shù)據(jù)之后再接著抓取下一個(gè)分頁(yè)頁(yè)面。也就是完全同步的編碼方式。所以慢是必然的。

那么如何調(diào)整代碼結(jié)構(gòu)才能使程序運(yùn)行迅速呢?

這里介紹一個(gè)簡(jiǎn)單又常用的方法:

我們可以采用多線程技術(shù),python 的 threading 包是專門用于多線程處理的。采用這種方式又多增加了兩個(gè)包:

threading

queue

可以將上述代碼的下載分頁(yè) URL 部分代碼放入一個(gè)多帶帶的線程去跑,并將下載好的 HTML 文檔存入一個(gè)隊(duì)列中。然后多開幾個(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://www.ezyhdfw.cn/yun/42586.html

相關(guān)文章

  • 2018電影票房分析-誰(shuí)才是票房之王

    摘要:另外由于豆瓣上一些電影評(píng)分?jǐn)?shù)量太少而不顯示,所以這里的電影數(shù)量會(huì)和票房數(shù)量有所差異。月度票房將類型片的票房按月劃分,得到了這張圖。 去年末的時(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)上的公開信息中采集2018年在國(guó)內(nèi)上映電影的票房、評(píng)分、類型、演員等信息...

    stormjun 評(píng)論0 收藏0
  • 23個(gè)Python爬蟲開源項(xiàng)目代碼,包含微信、淘寶、豆瓣、知乎、微博等

    摘要:今天為大家整理了個(gè)爬蟲項(xiàng)目。地址新浪微博爬蟲主要爬取新浪微博用戶的個(gè)人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進(jìn)行登錄,可通過(guò)多賬號(hào)登錄來(lái)防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...

    jlanglang 評(píng)論0 收藏0
  • Java學(xué)習(xí)必備書籍推薦終極版!

    摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)推薦豆瓣評(píng)分書的質(zhì)量沒的說(shuō),推薦大家好好看一下。推薦,豆瓣評(píng)分,人評(píng)價(jià)本書介紹了在編程中條極具實(shí)用價(jià)值的經(jīng)驗(yàn)規(guī)則,這些經(jīng)驗(yàn)規(guī)則涵蓋了大多數(shù)開發(fā)人員每天所面臨的問題的解決方案。 很早就想把JavaGuide的書單更新一下了,昨晚加今天早上花了幾個(gè)時(shí)間對(duì)之前的書單進(jìn)行了分類和補(bǔ)充完善。雖是終極版,但一定還有很多不錯(cuò)的 Java 書籍我沒有添加進(jìn)去,會(huì)繼續(xù)完善下去。希望這篇...

    Steve_Wang_ 評(píng)論0 收藏0
  • 爬蟲學(xué)習(xí)之基于 Scrapy 的爬蟲自動(dòng)登錄

    摘要:概述在前面兩篇爬蟲學(xué)習(xí)之基于的網(wǎng)絡(luò)爬蟲和爬蟲學(xué)習(xí)之簡(jiǎn)單的網(wǎng)絡(luò)爬蟲文章中我們通過(guò)兩個(gè)實(shí)際的案例,采用不同的方式進(jìn)行了內(nèi)容提取。 概述 在前面兩篇(爬蟲學(xué)習(xí)之基于Scrapy的網(wǎng)絡(luò)爬蟲和爬蟲學(xué)習(xí)之簡(jiǎn)單的網(wǎng)絡(luò)爬蟲)文章中我們通過(guò)兩個(gè)實(shí)際的案例,采用不同的方式進(jìn)行了內(nèi)容提取。我們對(duì)網(wǎng)絡(luò)爬蟲有了一個(gè)比較初級(jí)的認(rèn)識(shí),只要發(fā)起請(qǐng)求獲取響應(yīng)的網(wǎng)頁(yè)內(nèi)容,然后對(duì)內(nèi)容進(jìn)行格式化存儲(chǔ)。很多時(shí)候我們抓取到的內(nèi)容...

    Panda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<