Estou tentando obter o conteúdo da App Store> Empresas :
import requests
from lxml import html
page = requests.get("https://itunes.apple.com/in/genre/ios-business/id6000?mt=8")
tree = html.fromstring(page.text)
flist = []
plist = []
for i in range(0, 100):
app = tree.xpath("//div[@class='column first']/ul/li/a/@href")
ap = app[0]
page1 = requests.get(ap)
Quando eu tento o range
com (0,2)
ele funciona, mas quando eu coloco o range
in 100
s mostra este erro:
Traceback (most recent call last):
File "/home/preetham/Desktop/eg.py", line 17, in <module>
page1 = requests.get(ap)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 378, in send
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max retries exceeded with url: /in/app/adobe-reader/id469337564?mt=8 (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
python
python-requests
user3446000
fonte
fonte
i
variável em algum lugar nofor
?itunes.apple.com
. Você pode executardig itunes.apple.com
na sua linha de comando e postar os resultados aqui?Respostas:
O que aconteceu aqui é que o servidor do iTunes recusa sua conexão (você está enviando muitas solicitações do mesmo endereço IP em um curto período de tempo)
O rastreamento de erro é enganoso, deve ser algo como "Nenhuma conexão pôde ser estabelecida porque a máquina de destino a recusou ativamente" .
Existe um problema em sobre python.requests lib no Github, confira aqui
Para superar esse problema (não apenas um problema, mas um rastreamento de depuração enganoso), você deve capturar exceções relacionadas à conexão da seguinte maneira:
Outra maneira de superar esse problema é que, se você usar um intervalo de tempo suficiente para enviar solicitações ao servidor, isso poderá ser alcançado por
sleep(timeinsec)
função em python (não se esqueça de importar a suspensão)No geral, todas as solicitações são incríveis, py py, espero que resolva o seu problema.
fonte
(Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
peça. "gai" significagetaddrinfo
e o provável erro relacionado é: EAI_NONAME O nó ou serviço não é conhecido; ou o nó e o serviço são NULL; ou AI_NUMERICSERV foi especificado em hints.ai_flags e service não era uma sequência numérica de número de porta. Provavelmente parecia que o sono o corrigiu, mas você provavelmente apenas dormiu com um problema temporário de resolução de DNS.Basta usar os
requests'
recursos:Este será
GET
o URL e tente novamente 3 vezes em caso derequests.exceptions.ConnectionError
.backoff_factor
ajudará a aplicar atrasos entre tentativas para evitar falhas novamente em caso de cota de solicitação periódica.Dê uma olhada
requests.packages.urllib3.util.retry.Retry
, ele tem muitas opções para simplificar novas tentativas.fonte
python manage.py shell
e estou usandosession.get('http://localhost:8000/api/')
. Qualquer ajuda? @Zuludev-server
e mantê-lo funcionando primeiro.Apenas faça isso,
Cole o seguinte código no lugar de
page = requests.get(url)
:De nada :)
fonte
import time
requests
tem o seu próprio código para lidar com seu erro e repetiçãoexcept: ...
) derequests
esleep()
em resposta. Em vez disso, eles devem capturarrequests.exceptions.ConnectionError
esleep()
somente se essa exceção ocorrer. (Ou melhor ainda, basta usar aRetry()
classerequests
interna fornecida , como sugerido pelo @Zulu).pip install pyopenssl
pareceu resolver isso para mim.https://github.com/requests/requests/issues/4246
fonte
Eu tenho um problema semelhante, mas o código a seguir funcionou para mim.
"confirm = False" desativa a verificação SSL. Tentar e capturar pode ser adicionado como de costume.
fonte
É sempre bom implementar o tratamento de exceções. Isso não apenas ajuda a evitar a saída inesperada do script, mas também ajuda a registrar erros e notificação de informações. Ao usar solicitações Python, prefiro capturar exceções como esta:
Aqui renewIPadress () é uma função de definição do usuário que pode alterar o endereço IP se ele for bloqueado. Você pode ir sem essa função.
fonte
ip-adrress
em python, você sabe alguma coisa sobre isso, então deixe-me saberA especificação do proxy em um ambiente corporativo resolveu isso para mim.
O erro completo é:
fonte
Eu não era capaz de fazê-lo funcionar no Windows, mesmo depois de instalar o pyopenssl e tentar várias versões do python (enquanto funcionava bem no mac), então mudei para o urllib e funciona no python 3.6 (do python .org) e 3.7 (anaconda )
fonte
Quando eu estava escrevendo um script de teste do navegador selênio, encontrei esse erro ao ligar
driver.quit()
antes de usar uma chamada de API JS. Lembre-se de que sair do webdriver é a última coisa a fazer!fonte
Adicionando minha própria experiência para aqueles que estão enfrentando isso no futuro. Meu erro específico foi
Acontece que isso foi realmente porque eu tinha atingido o número máximo de arquivos abertos no meu sistema. Não tinha nada a ver com conexões com falha ou mesmo com um erro de DNS, conforme indicado.
fonte
Adicionando minha própria experiência:
quando tentei baixar um arquivo especificado no URL.
O erro foi
Eu o corrigi adicionando
verify = False
a função da seguinte maneira:fonte
Adicione cabeçalhos para esta solicitação.
fonte