3

賢明なアドバイスを期待して、初心者プログラマーと潜伏者がここにいます。:)

Python、BeautifulSoup、および Bing API を組み合わせて使用​​すると、次のコードで必要なものを見つけることができました。

import urllib2
from BeautifulSoup import BeautifulStoneSoup

Appid = #My Appid
query = #My query

soup = BeautifulStoneSoup(urllib2.urlopen("http://api.search.live.net/xml.aspx?Appid=" + Appid + "&query=" + query + "&sources=web"))
totalResults = soup.find('web:total').text

だから私は数千の検索用語でこれをやりたいと思っていました

  1. このリクエストを 1000 回行うと、サーバーに打撃を与えていると解釈されます。
  2. 上記のサーバーを攻撃しないようにするには、どのような手順を実行する必要がありますか (ベスト プラクティスとは何ですか?)、および
  3. 主要な検索エンジン API のいずれかを使用してこれを行う安価な (データ) 方法はありますか?

キーワードごとに 1 つの数字を取得するためだけにすべてのデータを取得するのは、不必要にコストがかかるように思えます。

FWIW、私はいくつかの宿題をして、Bing API に落ち着く前に、Google Search API (非推奨) と Yahoo の BOSS API (まもなく非推奨になり、有料サービスに置き換えられる) を試しました。ページを直接スクレイピングするのは不適切な形式と見なされることを理解しているので、検索エンジンを直接スクレイピングすることはしません。

4

2 に答える 2

1

私が大規模なURL解決をしなければならなかったときに以前に役立ったと私が考えることができる3つのアプローチがあります。

  1. HTTPパイプライン(ここに別のスニペット)
  2. IPごとのレート制限サーバー要求(つまり、各IPは1秒あたり3つの要求しか発行できません)。ここでいくつかの提案を見つけることができます:PythonでWebサービスへのリクエストのレートを制限する方法は?
  3. 内部プロキシサービスを介してリクエストを発行し、http_proxyすべてのリクエストを当該サービスにリダイレクトするために使用します。次に、このプロキシサービスは、一連のネットワークインターフェイスを反復処理し、レート制限された要求を発行します。そのためにツイストを使用できます。
于 2011-03-10T09:00:59.120 に答える
0

質問1に関して、Bingには、利用規約を人間が読める形式で要約したAPIBasicsPDFファイルがあります。「あなたがしなければならないこと」のセクション。これには、次のステートメントが含まれます。

使用をIPアドレスあたり7クエリ/秒(QPS)未満に制限します。条件によっては、この制限を超えることが許可される場合がありますが、これはapi_tou@microsoft.comとの話し合いを通じて承認する必要があります。

これが1回限りのスクリプトである場合は、リクエストの作成の間に単に追加するよりも複雑なことを行う必要はないsleepため、1秒間に2、3のリクエストのみを作成します。状況がより複雑な場合、たとえば、これらの要求がWebサービスの一部として行われている場合は、MahmoudAbdelkaderの回答の提案が役立ちます。

于 2011-03-10T09:03:43.140 に答える