5

特定の Web ページを定期的に (たとえば 1 時間ごとに) スクレイピングしたいと考えています。これは私がpythonでやりたいことです。スクレイピングされた結果は、SQLite テーブルに挿入されます。python-script は 1 時間ごとに実行されるため、新しい情報がスクレイピングされますが、「古い」情報も再度スクレイピングされます。

より正確には、トーナメントが進行するにつれて、同じページにますます多くの試合結果が公開されるスポーツ結果ページをスクレイピングしたいと考えています。したがって、新しいスクレイピングごとに、新しい結果を SQLite テーブルに入力するだけで済みます。古い結果は 1 時間前 (またはそれ以前) に既にスクレイピング (およびテーブルに挿入) されているためです。

また、2回目にスクレイピングされたときに、同じ結果を2回挿入したくありません。そのため、1 つの結果が既にスクレイピングされているかどうかを確認するメカニズムが必要です。これは SQL レベルで実行できますか? そのため、ページ全体をスクレイピングし、INSERT結果ごとにステートメントを作成INSERTしますが、以前はデータベースに存在しなかったステートメントのみが正常に実行されます。UNIQUE何かキーワードみたいなものを考えています。

または、パフォーマンスについて考えすぎているので、DROP TABLEスクレイピングを開始する前に毎回実行して、すべてを最初からスクレイピングすることでこれを解決する必要がありますか? 私は本当に多くのデータについて話しません。ちょうど1大会で100回程度の記録(=試合)で、年間50回程度の大会です。

基本的に、ある種のベストプラクティスのアプローチに興味があるだけです。

4

2 に答える 2

2

データが存在しない場合、データを挿入したいようですか? おそらく次のようなものです:

  1. エントリが存在するかどうかを確認します
  2. そうでない場合はデータを挿入する
  3. 存在する場合、エントリを更新しますか? (更新しますか)

2 つの別々の SQL ステートメント SELECT を発行してから、INSERT/UPDATE を発行できます。

または、一意に設定することもできます.sqlliteが発生する可能性がありますIntegrityError

try:
  # your insert here
  pass
except sqlite.IntegrityError:
  # data is duplicate insert
  pass
于 2013-04-17T14:59:16.613 に答える