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. 执行此请求一千次将被解释为锤击服务器,
  2. 我应该采取哪些步骤来不锤击所述服务器(最佳实践是什么?),以及
  3. 是否有使用任何主要搜索引擎 API 的更便宜的(数据)方式来做到这一点?

获取所有数据只是为了获取每个关键字的一个数字似乎不必要地昂贵,我想知道我是否错过了任何东西。

FWIW,我做了一些功课,并在使用 Bing API 之前尝试了 Google Search API(已弃用)和 Yahoo 的 BOSS API(很快将被弃用并替换为付费服务)。我知道直接抓取页面被认为是糟糕的形式,所以我将直接抓取搜索引擎。

4

2 回答 2

1

当我必须进行大规模 URL 解析时,我能想到的三种方法在以前有所帮助。

  1. HTTP 流水线(此处的另一个片段)
  2. 限制每个 IP 的服务器请求(即每个 IP 只能发出 3 个请求/秒)。可以在这里找到一些建议:如何限制 Python 中对 Web 服务的请求率?
  3. 通过内部代理服务发出请求,http_proxy用于将所有请求重定向到所述服务。然后,此代理服务将遍历一组网络接口并发出速率受限的请求。您可以为此使用Twisted
于 2011-03-10T09:00:59.120 回答
0

关于您的问题 1,Bing 有一个API Basics PDF 文件,该文件以人类可读的形式总结了条款和条件。在“你必须做什么”部分。这包括以下声明:

将您的使用限制为每个 IP 地址每秒少于 7 次查询 (QPS)。在某些情况下,您可能被允许超过此限制,但这必须通过与 api_tou@microsoft.com 讨论获得批准。

如果这只是一个一次性脚本,您不需要做任何比sleep在发出请求之间添加一个更复杂的事情,这样您每秒只发出几个请求。如果情况更复杂,例如这些请求是作为 Web 服务的一部分发出的,Mahmoud Abdelkader 的回答中的建议应该会对您有所帮助。

于 2011-03-10T09:03:43.140 回答