Получение всех вопросов Yahoo Answers, содержащих определенное слово. Проблема с ограничением скорости

Итак, я пытаюсь составить базу данных всех вопросов в Yahoo Answers, которые содержат определенное слово. В настоящее время я делаю это с помощью следующего сценария, который я написал, используя класс-оболочку Pynswers для вызова API Yahoo.

from Answers import Answers

app = Answers()
wbk = xlwt.Workbook()


sheet = wbk.add_sheet('sheet 1')

app.appid = '...'
questions = app.questionSearch({'query':'tornado',})

#Write all column headings
sheet.write(0,0, 'Question')
sheet.write(0,1,'Answer')
sheet.write(0,2, 'Date')
sheet.write(0,3,'Number of Answers')


for i, value in enumerate(questions):
        content = value['Content'].strip()
        chosenAnswer = value['ChosenAnswer'].strip()
        date = value['Date'].strip()
        numAnswers = value['NumAnswers'].strip()

        #Write values into respect columns, (row, column)
        sheet.write(i+1,0,content)
        sheet.write(i+1,1,chosenAnswer)
        sheet.write(i+1,2,date)
        sheet.write(i+1,3,numAnswers)


wbk.save('C://test.xls')

Проблема в том, что я получаю только около 10 ответов на этот запрос, и я не могу найти способ расширить круг вопросов, которые я получаю. Любые идеи?


person Parseltongue    schedule 07.03.2013    source источник
comment
На самом деле я не знаю, так ли это, я думаю, это зависит от страны, сайта и т. д. en.wikipedia.org /wiki/веб-скрейпинг   -  person cowls    schedule 07.03.2013
comment
ОП использует API-интерфейсы Yahoo, так что это не вопрос веб-скрейпинга.   -  person Mark Hildreth    schedule 07.03.2013


Ответы (1)


Pynswers выглядит очень свободной оболочкой сам Yahoo API. Документация по API показывает, как использовать поля начала и результатов в запросе:

Итак, возможно, вы можете сделать следующее:

first_50 = app.questionSearch({'query':'tornado', 'start' : 0, 'results' : 50})
next_50 = app.questionSearch({'query':'tornado', 'start' : 50, 'results' : 50})

Изменить

Кроме того, что касается ограничения скорости, Yahoo заявляет о своем API (этот раздел взят 7 марта 2013 г.):

Сколько раз я могу звонить YQL в минуту/час/день?

Ограничения скорости в YQL основаны на вашей аутентификации. Если вы используете аутентификацию на основе IP, то вы ограничены 2 000 вызовов/час/IP на общедоступный URL-адрес веб-службы YQL (/v1/public/) или 20 000 вызовов/час/IP на частный URL-адрес веб-службы YQL. (/v1/yql/), для которого требуется авторизация OAuth. См. URL-адреса веб-службы YQL для общедоступных и частных URL-адресов. Приложения (определяемые ключом доступа) ограничены 100 000 вызовов в день на ключ*. Однако, чтобы убедиться, что услуга доступна для всех, мы просим вас не вызывать YQL чаще, чем 0,2 раза в секунду или 1000 раз в час для пользователей с проверкой подлинности IP и 2,7 раза в секунду или 10 000 раз в час.

*Пожалуйста, не создавайте несколько ключей, чтобы «избежать» ограничений скорости. Если вы хотите, чтобы мы увеличили ваш лимит, пожалуйста, свяжитесь с нами и сообщите подробности вашего проекта, и мы сделаем все возможное, чтобы удовлетворить вас.

Очевидно, вам нужно быть осторожным со своим кодом, чтобы убедиться, что вы получаете необходимую информацию, не превышая ограничение скорости. Таким образом, получение всех ответов может оказаться нецелесообразным.

person Mark Hildreth    schedule 07.03.2013
comment
Спасибо за это, и я сделал эту самую вещь. Мой вопрос, и я должен был быть более конкретным, заключается в том, как выйти за рамки 50 запросов с несколькими запросами. - person Parseltongue; 07.03.2013
comment
Понял, позвольте мне попробовать это, и я дам вам знать. Я не знал, что есть поле «начало». - person Parseltongue; 07.03.2013
comment
Хм, может быть, вы можете придумать способ обойти это. Согласно API Yahoo, максимальное число «стартов» может достигать 1000. Таким образом, я могу очистить только 1050. Есть идеи? - person Parseltongue; 07.03.2013
comment
Нет, я не знаю, есть ли способ обойти это, и, учитывая, что они добавили ограничение (которое на самом деле требует больше работы, чем возможность использовать любое число, которое вы хотите), я полагаю, что есть причина для этого ограничения. Я видел подобные ограничения в других местах. Возможно, причина этого ограничения может стать хорошей темой для другого вопроса StackOverflow. - person Mark Hildreth; 07.03.2013
comment
@Parseltongue задал вопрос об ограничении, но модератор закрыл его. Я прокомментировал: Большинство поисковых API, подобных этому (особенно от Yahoo и Google), будут иметь ограниченный диапазон результатов, которые вы можете получить для данного запроса. Причины: 1) предположительно наиболее полезные результаты будут отображаться на первых нескольких страницах результатов и 2) запретить другим сайтам или приложениям выполнять полное извлечение данных. - person BrianC; 17.03.2013
comment
Спасибо за кросс-пост ответа, я никогда этого не видел. - person Parseltongue; 26.03.2013