对关键字搜索结果总数进行数据处理的适当方法是什么?

时间:2011-03-10 08:49:21

标签: python beautifulsoup google-search-api bing-api yahoo-boss-api

新手程序员和潜伏者在这里,希望得到一些明智的建议。 :)

结合使用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都有更便宜的(数据)方法吗?
  4. 获取所有数据只是为了获取每个关键字的一个数字似乎不必要的昂贵,我想知道我是否遗漏了任何东西。

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

2 个答案:

答案 0 :(得分:1)

当我不得不进行大规模的URL解析时,我能想到的有三种方法已经有所帮助。

  1. HTTP Pipelining(另一个代码段here
  2. 每个IP的速率限制服务器请求(即,每个IP只能发出3个请求/秒)。可以在此处找到一些建议:How to limit rate of requests to web services in Python?
  3. 通过内部代理服务发出请求,使用http_proxy将所有请求重定向到所述服务。然后,该代理服务将迭代一组网络接口并发出速率受限的请求。您可以使用Twisted

答案 1 :(得分:0)

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

  

将您的使用限制在7以下   每个IP的每秒查询数(QPS)   地址。你可能被允许   在某些情况下超过此限制   条件,但必须得到批准   通过讨论   api_tou@microsoft.com。

如果这只是一个一次性的脚本,那么除了在发出请求之间添加sleep之外,您不需要做任何更复杂的事情,这样您每秒只需要几个请求。如果情况更复杂,例如这些请求是作为Web服务的一部分提出的,Mahmoud Abdelkader's answer中的建议可以为您提供帮助。