Как правильно определить общее количество результатов поиска по ключевым словам? - PullRequest
3 голосов
/ 10 марта 2011

начинающий программист и тайник, надеясь получить какой-нибудь разумный совет. :)

Используя комбинацию 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, я выполнил некоторую домашнюю работу и попробовал API поиска Google (устарел) и API BOSS Yahoo (вскоре будет объявлен устаревшим и заменен платным сервисом), прежде чем перейти к использованию Bing API. Я понимаю, что прямая очистка страницы считается плохой формой, поэтому я перейду непосредственно к поисковым системам.

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Существует три подхода, которые я мог бы использовать ранее, когда мне приходилось выполнять масштабное разрешение URL.

  1. HTTP Pipelining (еще один фрагмент здесь )
  2. Ограничивающие скорость запросы к серверу на один IP (то есть каждый IP может выдавать только 3 запроса в секунду). Некоторые предложения можно найти здесь: Как ограничить частоту запросов к веб-сервисам в Python?
  3. Отправка запросов через внутреннюю прокси-службу с использованием http_proxy для перенаправления всех запросов на указанную службу. Затем эта прокси-служба будет перебирать набор сетевых интерфейсов и выдавать запросы с ограниченной скоростью. Для этого вы можете использовать Twisted .
0 голосов
/ 10 марта 2011

Что касается вашего вопроса 1, у Bing есть файл PDF с основами API , который обобщает условия в удобочитаемой форме.В разделе «Что вы должны сделать».Это включает следующее утверждение:

Ограничьте ваше использование менее чем 7 запросами в секунду (QPS) на IP-адрес.Вам может быть разрешено превышать этот лимит при некоторых условиях, но это должно быть одобрено путем обсуждения с api_tou@microsoft.com.

Если это только одноразовый скрипт, вам не нужносделать что-то более сложное, чем просто добавление sleep между запросами, так что вы делаете только пару запросов в секунду.Если ситуация более сложная, например, эти запросы выполняются в рамках веб-службы, предложения в Махмуд Абделькадер должны помочь вам.

...