【问题标题】:What is an appropriate way to datamine the total number of results of a keyword search?什么是数据挖掘关键字搜索结果总数的合适方法?
【发布时间】:2011-03-10 08:49:20
【问题描述】:

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

结合使用 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(很快将被弃用并被付费服务取代)。我知道直接抓取页面被认为是糟糕的形式,所以我会直接抓取搜索引擎。

【问题讨论】:

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


    【解决方案1】:

    当我必须进行大规模 URL 解析时,我能想到三种方法。

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

    【讨论】:

    • 谢谢,这个答案比我需要的要复杂得多,但我非常感谢您的帮助。 :-) 如果我想做一些很酷的事情,将来会很有用。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,这就是我所需要的(一次性研究请求)。 :-) 感谢你们给出的两个答案!
    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 2019-04-24
    • 2010-11-12
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多