1

私はウェブクローラーを持っています。Web クローラーは、私が提供した Web ページからリンクを収集しますが、リンクを取得するときに、Web サイトが原因で一部のリンクが重複しています。新しい行が古い行とまったく同じ場合、MYSQL でデータを上書きする方法はありますか。

リンク フィールドに http://www.facebook.com があるとします

また、 http://www.facebook.comを再度取得することもできました。後者で古い行を上書きしたいと思います。したがって、検索エンジンに衝突はありません。

4

4 に答える 4

2

日付が既に存在するlast_updated場合は、日付を更新することを想定しています。urlそうでなければ、更新を行う正当な理由はありません。

 INSERT INTO `scrapping_table`
    (`url`)
    VALUES
    ("www.facebook.com")
    ON DUPLICATE KEY UPDATE
    `date_updated` = `datetime.now()`
于 2012-08-16T17:51:26.947 に答える
1

ON DUPLICATE KEY行動に目を向ける

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

基本的に、関心のある列に一意のキーを作成し、挿入ステートメントを記述してから追加します

ON DUPLICATE KEY UPDATE col = overwriting value
于 2012-08-16T17:42:54.997 に答える
0

注意してください!!

おそらく何百万ものリンクを見つける Web クローラーを操作しているときに、クエリの各「クロール」プロセスの起動を最小限に抑えたい... ボットにフィードする一意のリンク テーブルを作成しますか? または、検索結果の重複を防ぎたいですか?

一意の URL プール テーブル:

  • ページのクロール中 - URL を配列 (またはリスト) に保存し、(!in_array()) が一意の値の配列であることを確認する必要があります。クロールする各ページには、繰り返されるリンクが多数含まれていることがわかります。 SQLを使用する前に。
  • URL をハッシュ (32 桁の「simhash」[1,0]) に変換します。
  • dbへの接続を開き、存在するかどうかを確認して、それらをダンプします! 更新しないでください(2番目のプロセスを作成しています)。インデックス付きテーブルでハッシュを使用してリンクを一致させる必要があります。これにより、はるかに高速になります。

検索結果の重複を防ぐ:

  • 上記の方法で URL をインデックスに登録した場合、重複した URL は見つからないはずです。重複している場合は、クロール操作に問題があることを意味します。

  • 別のテーブルに重複する値があり、それを検索したいが重複した結果を返さない場合でも、クエリで DISTINCT を使用できます。

幸運を!

于 2013-03-24T23:24:51.650 に答える
0

リンクフィールドが使用できるよりも一意である場合

 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'

リンクフィールドが一意であることを確認してください。列にさらに一意のフィールドがある場合は、この2番目の方法を使用することお勧めします.複数の一意のインデックスを持つテーブルで ON DUPLICATE KEY 句を使用しないようにするためです.

  1. リンク フィールドを一意に設定します。
  2. 行を挿入する前に試してください

    Select "primary_id" from mytable where link_field="www.facebook.com"
    
  3. この SQL から返された行の数をカウントします。

    =>カウント>0の場合、SELECT SQLで取得した「primary_id」を使用して行を更新します

    => count==0 の場合、行を挿入するだけです

于 2012-08-16T18:11:45.903 に答える