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