iT邦幫忙

0

Python 爬蟲 重複

有一個爬新聞的程式,每天執行一次,但是會爬到同一篇新聞的情況,因為我是抓一整頁,所以該頁面會有昨天的新聞,這樣我該如何處理呢?

我有兩種想法:
1.爬蟲完去跟資料庫比對有沒有重複的資料,沒有在存入資料庫。
2.爬蟲完先存入資料庫,在下sql指令把重複資料刪除。

不知道哪一種比較好?

請大神們幫忙解惑/images/emoticon/emoticon06.gif

ps爬蟲使用python+mysql

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2020-02-13 11:50:42 檢舉
1,不用懷疑,寫的開銷比搜尋來的大。
淺水員 iT邦研究生 4 級 ‧ 2020-02-13 12:23:10 檢舉
hash 是好東西,可以先比對雜湊值,發現相同雜湊值時,再去比對文章內容。
tlf20918 iT邦新手 5 級 ‧ 2020-02-13 12:28:07 檢舉
可以詳細一點嘛@@菜鳥聽不太懂QQ
絕對是1。
至於怎麼比對,標題字段完全一樣的話......直接從資料庫叫已存資料出來(標題欄位即可),然後和你新爬的資料作merge(join),沒merge到的就是新資料,建tag,把tag起來的新資料insert進資料庫。
上面提的hash是把你一串文字做編碼,同理,如果你標題文字一樣,那hash出來內容也會一樣,接著一樣做我說merge的事情。

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-02-13 10:47:41

我選第1種
做法如下:
1.資料表加一個欄位 newskey,做為「判斷新聞是否重覆」的依據
2.資料表加一個索引,索引欄位就只有一個 newskey,最重要的是要勾選「UNIQUE」屬性
3.爬蟲爬到資料後,在寫入資料庫之前,多填入一個 newskey 欄位的值
4.如果 newskey 沒重覆,就可成功寫入資料庫
5.如果 newskey 重覆,資料庫就會因為「索引值重覆」而無法寫入資料庫

至於 newskey,最簡單的方法就是從 URL 裡面挑
以下隨便舉幾個例子
4334642
4441505
1643498
3065383

或是你要把「整段 URL 當成 newskey」也可以

tlf20918 iT邦新手 5 級 ‧ 2020-02-13 12:05:51 檢舉

那我要怎麼跟資料庫的資料比對呢?

那我要怎麼跟資料庫的資料比對呢?

5.如果 newskey 重覆,資料庫就會因為「索引值重覆」而無法寫入資料庫

示意

我要發表回答

立即登入回答