我有一個網絡爬蟲。網絡爬蟲收集我給它的網頁的鏈接,但是當它檢索鏈接時,由於網站的緣故,一些鏈接被複制。如果新行與舊行完全相同,那麼MYSQL有沒有辦法覆蓋數據?覆蓋mysql表數據
說,如果我在一個鏈接字段
我也設法再次回升http://www.facebook.com有http://www.facebook.com,我想後者覆蓋舊行。因此我的搜索引擎沒有衝突。
我有一個網絡爬蟲。網絡爬蟲收集我給它的網頁的鏈接,但是當它檢索鏈接時,由於網站的緣故,一些鏈接被複制。如果新行與舊行完全相同,那麼MYSQL有沒有辦法覆蓋數據?覆蓋mysql表數據
說,如果我在一個鏈接字段
我也設法再次回升http://www.facebook.com有http://www.facebook.com,我想後者覆蓋舊行。因此我的搜索引擎沒有衝突。
考慮ON DUPLICATE KEY
行動
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
基本上讓你擔心了一個獨特的鍵的列編寫插入語句,然後添加
ON DUPLICATE KEY UPDATE col = overwriting value
我假設你想如果url
已存在,則更新last_updated
日期。否則沒有好的理由去做更新。
INSERT INTO `scrapping_table`
(`url`)
VALUES
("www.facebook.com")
ON DUPLICATE KEY UPDATE
`date_updated` = `datetime.now()`
我有桌子,'網頁',你可以解釋一下更多 – 2012-08-16 17:54:01
所以你的'網頁'表有一個列'url'存儲'facebook.com'。現在您再次抓取網頁,您的抓取工具再次找到「facebook.com」。現在更新'url'是一個多餘的步驟,除非您可以通過存儲執行此更新的'date'來存儲關於此新爬網的更多元信息。 – 2012-08-16 18:04:55
在像Google這樣的大型系統中,抓取可能需要幾周時間,並且上次查看此url信息對於搜索算法非常有用,因此抓取工具不會繼續瀏覽相同的url。稍微不同的是,谷歌使用「倒排索引」,這是建立全文搜索的好策略。 – 2012-08-16 18:06:53
如果您的鏈接域是唯一比你可以使用
INSERT INTO "mytable" (link_field, x_column, y_column) VALUES ("www.facebook.com",'something new for x','something new for y')
ON DUPLICATE KEY UPDATE x_column='something new for x', y_column='something new for y'
只要確保你的鏈接域是唯一的,如果你在你的列有更獨特的領域,我建議使用,因爲這第二個方法they建議避免在具有多個唯一索引的表上使用ON DUPLICATE KEY子句。
之前插入一行嘗試
Select "primary_id" from mytable where link_field="www.facebook.com"
從這個SQL計數返回的行數。
=>如果計數> 0,然後更新使用 「primary_id」 我們只是通過SELECT SQL
=>抓起行,如果count == 0,只需要插入你的行
謹防!!
同時經營一個網絡爬蟲,可能會發現數以百萬計的 你希望儘量減少查詢的每一個「爬行」過程火災鏈接... 你想創建一個獨特的聯繫表,將養活機器人?或者你想防止重複的搜索結果?
唯一的URL檯球桌: - (!in_array())
防止重複結果搜索:
如果在上述方法編制索引的網址,你不應該查找重複的URL,如果你有,這意味着在你的爬行操作的問題。
即使您在另一個表中有重複的值,並且您想要搜索但沒有返回重複結果,您可以在查詢中使用DISTINCT。
祝你好運!
[有幫助?](http://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql) – 2012-08-16 17:44:45