成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Python爬蟲(chóng)案例:抓取豆瓣編程類(lèi)高評(píng)分書(shū)籍

SunZhaopeng / 1970人閱讀

摘要:本文將通過(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)容。

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

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

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

首先我們找到豆瓣的編程類(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

相關(guān)文章

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

    摘要:另外由于豆瓣上一些電影評(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)型、演員等信息...

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

    摘要:今天為大家整理了個(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); 今天為大家整...

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

    摘要:實(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ù)完善下去。希望這篇...

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

    摘要:概述在前面兩篇爬蟲(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)容...

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

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

0條評(píng)論

閱讀需要支付1元查看
<