iT邦幫忙

0

【PYTHON】請問如何避免內容重複抓取

  • 分享至 

  • xImage

我正在練習寫python,目前進度到練習從新聞網站抓取文章。
第一次抓取,我是讓爬蟲從第一頁開始到最後一頁抓取內容。
而我想,如果是新聞網站,其內容更新頻率滿快,但我的操作方式卻會讓資料不段重複抓取。
想問如果我今天想讓機器人,抓文章,該如何讓他判斷該篇文章是否已經抓取過,如果已經抓取過就別抓取下來。
是有嘗試用SQL來建立資料庫,但還是不斷新增舊的文章。
原本有讓機器人不斷刷新第一頁,但好像不是辦法,因為設置的間格頻率很難定,有時候新的文章多,到道第二頁,或者有時候沒有新的文章,這樣又會抓取重複內容。
有經驗的大神知道我該如何處理嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
japhenchen
iT邦超人 1 級 ‧ 2022-09-22 07:46:06
最佳解答

網址及參數都做HASH並存於資料庫,只要下次要搜尋新網頁前先搜一下資料庫是否有相同的HASH字串,如果有,就跳過

看更多先前的回應...收起先前的回應...

可以把這個HASH(湊雜值)字串用一個獨立表存放,裡面不塞別的就放這些由網址跟參數組成的湊雜表,不用太麻煩用SHA1或MD5即可,畢竟網址世界裡能產生一模一樣的湊雜值幾乎是不可能

就醬 ,

建議你的新聞來源可以利用各大新聞網站順帶發行的RSS(如果有的話),RSS比較不會出現連續幾天都有相同新聞的狀況,我都是這樣在抓跟公司有關的重點新聞

跟安全性無關的事,都不需要用太耗資源的湊雜函數

planetoid iT邦新手 1 級 ‧ 2022-09-25 15:57:41 檢舉

網站配合搜尋引擎優化,減少搜尋出現重複內容,通常會在網頁內提供標準化的網址,例如:

HTML <link rel="canonical" href="標準化的網址">

從這個網頁標籤取網址,可以減少要額外處理 UTM tacking 的連結參數的資料清理的功。

相關文章:

  1. 使用標準標記整合重複的網址 | Google Developers https://developers.google.com/search/docs/advanced/crawling/consolidate-duplicate-urls?hl=zh-tw
  2. Canonical標準網址操作指南,操作SEO不再苦惱- awoo 阿物科技 https://awoo.ai/zh-hant/blog/canonical-seo/
  3. UTM是什麼?如何善用UTM標籤精確分辨你的網站流量來源 https://transbiz.com.tw/utm/

UTM是好事,但能不開啟頁面前就取得,這會更精確

1
tryit
iT邦研究生 4 級 ‧ 2022-09-22 02:59:39

新聞喔,應該會有時間吧

用時間判斷應該就可以了吧?
你爬蟲會爬整頁的內容對吧?,想辦法分辨出時間的element,只抓取從某時間範圍即可。
那時間部分就可以看你要hardcode或者用input()方式進行處理。

1
Felix
iT邦研究生 2 級 ‧ 2022-09-22 03:06:07

識別碼

這個方法較為可靠,也不限於固定頻率的資料。
記錄資料的識別碼(Identifier),只要下次爬取的第一則識別碼不存在於資料庫,就代表有新的資料,但是爬取每則前都要先比對識別碼,直到識別碼已存在於資料庫才停止爬取。

ETagLast-Modified

這個方法較不可靠,並僅限於固定頻率的資料。
記錄其中一個,只要下次爬取的 ETag 或 Last-Modified 和資料庫記錄的相同,就代表沒有新的資料,但是必須知道每次更新資料的數量。

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-09-22 09:38:20

用每篇文章的 URL 判斷是否重覆即可

1
熊熊工程師
iT邦研究生 1 級 ‧ 2022-09-22 21:48:19
  1. 理論上 html tag 都會藏每篇文章的 ID,可以試著找找看
  2. 用文章標題過濾,在插入資料庫前先進行搜尋,看看是否已經存在 (可搭配文章日期)
  3. 用文章網址過濾,同樣在插入資料庫前先搜尋
  4. 把你爬到的整包東西 (標題、內文、時間),都做 hash,並在資料庫內新增一個欄位存放 hash,一樣每次在插入資料前先用 hash 做搜尋

我要發表回答

立即登入回答