Ну, я ничего не знаю о Yahoo Term Extractor, но я бы предположил, что ваш вызов request.add_data(queryData)
просто связывает другой набор данных с каждой итерацией вашего цикла. И тогда вызов OPENER.open(request).read()
, вероятно, будет обрабатывать только результаты первого набора данных. Таким образом, либо ваш request
объект может содержать только один запрос, либо внутренняя работа вашего OPENER
объекта может обрабатывать только один запрос, это так просто.
На самом деле, третья причина приходит мне на ум, когда я читаю документацию, предоставленную по вашей ссылке, и, вероятно, это истинная причина:
RATE LIMITS
Срок службы извлечения ограничен 5000 запросами на IP-адрес в день и некоммерческим использованием. См. Информацию об ограничении скорости.
Поэтому имеет смысл, что API будет ограничивать ваше использование одним запросом за раз и не позволит вам объединять несколько запросов в одном запросе.
В любом случае, я бы предположил, что вы можете исправить свою проблему "наивным" способом, используя множество request
переменных вместо одной, или, возможно, просто создавая новый запрос на каждой итерации цикла. Если вы не беспокоитесь о сохранении своих результатов и просто пытаетесь отладить, вы можете попробовать:
for c in comments:
print "building query"
dataDict = [ ('appid', appid), ('context', c)]
queryData = urllib.urlencode(dataDict)
request = urllib2.Request() # I don't know how to initialize this variable, do it yourself
request.add_data(queryData)
print "fetching result"
result = OPENER.open(request).read()
print result
time.sleep(1)
Опять же, я не знаю об Yahoo Term Extractor (и при этом у меня нет времени исследовать его), поэтому вполне может быть лучший, более естественный способ сделать это. Если вы опубликуете более подробную информацию о вашем коде (то есть, из каких классов поступают объекты request
и OPENER
), я мог бы уточнить это.