我正在練習寫python,目前進度到練習從新聞網站抓取文章。
第一次抓取,我是讓爬蟲從第一頁開始到最後一頁抓取內容。
而我想,如果是新聞網站,其內容更新頻率滿快,但我的操作方式卻會讓資料不段重複抓取。
想問如果我今天想讓機器人,抓文章,該如何讓他判斷該篇文章是否已經抓取過,如果已經抓取過就別抓取下來。
是有嘗試用SQL來建立資料庫,但還是不斷新增舊的文章。
原本有讓機器人不斷刷新第一頁,但好像不是辦法,因為設置的間格頻率很難定,有時候新的文章多,到道第二頁,或者有時候沒有新的文章,這樣又會抓取重複內容。
有經驗的大神知道我該如何處理嗎?
網址及參數都做HASH並存於資料庫,只要下次要搜尋新網頁前先搜一下資料庫是否有相同的HASH字串,如果有,就跳過
可以把這個HASH(湊雜值)字串用一個獨立表存放,裡面不塞別的就放這些由網址跟參數組成的湊雜表,不用太麻煩用SHA1或MD5即可,畢竟網址世界裡能產生一模一樣的湊雜值幾乎是不可能
就醬 ,
建議你的新聞來源可以利用各大新聞網站順帶發行的RSS(如果有的話),RSS比較不會出現連續幾天都有相同新聞的狀況,我都是這樣在抓跟公司有關的重點新聞
跟安全性無關的事,都不需要用太耗資源的湊雜函數
網站配合搜尋引擎優化,減少搜尋出現重複內容,通常會在網頁內提供標準化的網址,例如:
HTML <link rel="canonical" href="標準化的網址">
從這個網頁標籤取網址,可以減少要額外處理 UTM tacking 的連結參數的資料清理的功。
相關文章:
UTM是好事,但能不開啟頁面前就取得,這會更精確
新聞喔,應該會有時間吧
用時間判斷應該就可以了吧?
你爬蟲會爬整頁的內容對吧?,想辦法分辨出時間的element,只抓取從某時間範圍即可。
那時間部分就可以看你要hardcode或者用input()方式進行處理。
這個方法較為可靠,也不限於固定頻率的資料。
記錄資料的識別碼(Identifier),只要下次爬取的第一則識別碼不存在於資料庫,就代表有新的資料,但是爬取每則前都要先比對識別碼,直到識別碼已存在於資料庫才停止爬取。
這個方法較不可靠,並僅限於固定頻率的資料。
記錄其中一個,只要下次爬取的 ETag 或 Last-Modified 和資料庫記錄的相同,就代表沒有新的資料,但是必須知道每次更新資料的數量。