2016-07-11 3 views
1

Интересно, почему, когда я называю requests.get() метод последовательно, как это:Модуль запросов Python, как выдавать несколько запросов в цикле for?

response = requests.get(url.format("set")) 
print(response.status_code) 
response = requests.get(url.format("map")) 
print(response.status_code) 
response = requests.get(url.format("list")) 
print(response.status_code) 
response = requests.get(url.format("vector")) 
print(response.status_code) 
response = requests.get(url.format("string")) 
print(response.status_code) 

Я получил статус OK для всех запросов, но когда я делаю это в цикл, как:

for word in fIn : 
     response = requests.get(url.format(word)) 
     if(response.status_code == 200): 
      print "OK" 
     else: 
      print(response.status_code) 
      print "Error" 
      print word 

У меня 400 (ошибка) для всех запросов, кроме последнего.

Дополнительная информация: есть related question on SO, где упоминаются 2 способа справиться с этой ситуацией: ждать, заголовки.
wait не работает в моей ситуации
и о заголовках - я не знаю, что там предоставить.

Update: конкретной версии, что я пытаюсь выполнить:

from lxml import html 

import requests 

fOut = open("descriptions.txt","w") 

with open('dummyWords.txt') as fIn: 
    for word in fIn : 
     print word 
     response = requests.get(url.format(word)) 
     if(response.status_code == 200): 
      print "OK" 
     else: 
      print(response.status_code) 
      print(word) 
+3

Есть ли у них ограничение по срокам? – Tim

+0

@Tim Мне известно о пределе ставки, я не знаю, есть ли у них. Но мне кажется странным, что запросы на ввод вручную работают, а для цикла - нет. Может быть, в цикле for каждый раз, когда создается новый объект для сеанса и устанавливается новый сеанс, а в ручных запросах используется один сеанс? –

+0

Помогите? http://stackoverflow.com/questions/31306501/python-requests-library-looping-requests-get – Bahrom

ответ

2

Вы трейлинг переводы строк, которые вам нужно полосы от:

with open('dummyWords.txt') as fIn: 
    for word in map(str.strip, fIn) : 

Он работает последний, как вы, очевидно, не имеете новой строки в конце последнего слова в файле. "www.foo.com\n" - это не то же самое, что и "www.foo.com"

+0

Я думаю, что стандарт - это должна быть новая строка в конце последней строки. Если он это делает или нет, то другое. http://stackoverflow.com/questions/729692/why-should-text-files-end-with-a-newline – Tim

+0

@Tim, вы можете редактировать файл по своему усмотрению, то, что вы не можете сделать, это добавить новые строки для URL и ожидать, что они будут работать. –

+0

Мой комментарий относится к предпоследнему предложению - он должен * иметь его там, но он явно этого не делает. – Tim

Смежные вопросы