爬蟲之全站爬取方法

2021-09-13 01:54:53 字數 1553 閱讀 7902

方法

做過好幾個關於**全站的專案,這裡總結一下。

先把上面那張圖寫下來,全站爬取的兩種方法:

關係網路:

優點:簡單;可以抓取「熱門」資料

缺點:無法抓取全量資料;速度慢;需要解決去重問題

可行性:比較高

遍歷id

優點:可以抓取所有資料;不用資料去重

缺點:資源消耗大;速度慢;可能被發現

可行性:僅可用於id自增

關於關係網路

其實這個很好理解。比如說知乎,乙個大v有100w粉絲,從這個大v出發,抓取粉絲的粉絲,一直迴圈下去。(可能是個死迴圈)

這個方法就比較簡單,scrapy中就是繼承crawlspider,再編寫匹配規則就好。

這種方法一般是搜尋引擎會做的。而且抓取的內容基本是最多人看到的,所以月排在前面,和seo有關。

但是這種方法的缺點也是很明顯的,最明顯的就是沒法抓全資料,像那種冷門的資料就沒法抓取到,速度也是比較慢的,必須儲存去重佇列,以防止重複抓取頁面。(了解下布隆過濾器)

如果對資料完整性要求沒那麼高可以考慮這種方法。

遍歷id

找各種方法就比較無腦了,啥也不用想,從0開始遍歷跑吧。

毫無疑問,這種方法可以抓取**所有的資料,因為在開始抓取前就已經完成的去重,所以這方面就不用管了。

但是缺點也很明顯,因為是遍歷id,所以需要很多伺服器資源和**資源,有可能某個id已經下架或失效。所以整個工程請求量會非常大。而且可能被別人發現,一般人都去看那些熱門帖子,結果你把那麼重來沒人看的翻了一遍,別人也會發現資料異常的(也會存在假資料的情況?)。

而且這種方法之適用於id自增的,大多數是數字id遞增,比如說天眼查的:

知乎也是:

應該是和數字有關係,可以先取樣進行抓取,研究資料分布情況。

當提供不正確id時,也會返回資料不存在的情況

在這裡提供乙個生成id的方法

最後再看看這張圖。兩種方法都有優缺點,根據實際需求選取,如果你還知道別的抓取方法,歡迎指出。

scrapy 全站爬取

如何查詢scrapy有哪些模版?scrapy genspider list 如何建立crawl模版?scrapy genspider t crawl 網域名稱 scrapy genspider t crawl i.cnblogs.com 如何把搜尋目錄加入到環境變數?setting import o...

爬蟲之小說爬取

以筆趣閣 為例,爬取一念永恆這本 具體 如下 1 from bs4 import beautifulsoup 2from urllib import request 3import requests 4importre5 import sys6 def down this chapter chapt...

爬蟲之亞馬遜爬取

根據mazon函式裡的引數來,爬取相關的書籍,並以json來儲存 import requests import re import random import json from bs4 import beautifulsoup import pickle useagent def mazon te...