Saya mencoba untuk mendapatkan konten dari App Store> Bisnis :
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)
Ketika saya mencoba range
dengan (0,2)
itu berfungsi, tetapi ketika saya meletakkan range
di 100
s itu menunjukkan kesalahan ini:
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
sumber
sumber
i
variabel di suatu tempat difor
?itunes.apple.com
. Bisakah Anda menjalankandig itunes.apple.com
di baris perintah dan memposting hasilnya di sini?Jawaban:
Apa yang terjadi di sini adalah bahwa server itunes menolak koneksi Anda (Anda mengirim terlalu banyak permintaan dari alamat ip yang sama dalam waktu singkat)
jejak kesalahan menyesatkan itu seharusnya sesuatu seperti "Tidak ada koneksi dapat dibuat karena mesin target secara aktif menolaknya" .
Ada masalah di tentang python.requests lib di Github, periksa di sini
Untuk mengatasi masalah ini (tidak terlalu masalah karena jejak debug yang menyesatkan), Anda harus menangkap pengecualian terkait koneksi seperti:
Cara lain untuk mengatasi masalah ini adalah jika Anda menggunakan celah waktu yang cukup untuk mengirim permintaan ke server ini dapat dicapai dengan
sleep(timeinsec)
fungsi dalam python (jangan lupa untuk mengimpor sleep)Semua dalam semua permintaan adalah python lib yang luar biasa, harapan yang memecahkan masalah Anda.
sumber
(Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
bagian. "gai" adalah singkatangetaddrinfo
, dan kemungkinan kesalahan terkait adalah: EAI_NONAME Node atau layanan tidak dikenal; atau kedua simpul dan layanan NULL; atau AI_NUMERICSERV ditentukan dalam hints.ai_flags dan layanan bukan string nomor porta numerik. Itu mungkin tampak seperti tidur memperbaikinya, tetapi Anda mungkin hanya tidur melalui masalah DNS resolver sementara.Cukup gunakan
requests'
fitur:Ini akan
GET
URL dan coba lagi 3 kali dalam kasusrequests.exceptions.ConnectionError
.backoff_factor
akan membantu menerapkan penundaan antar upaya untuk menghindari kegagalan lagi jika terjadi kuota permintaan berkala.Lihatlah
requests.packages.urllib3.util.retry.Retry
, ia memiliki banyak opsi untuk menyederhanakan percobaan.sumber
python manage.py shell
dan saya gunakansession.get('http://localhost:8000/api/')
. Ada bantuan? @Cepatdev-server
Sudah lupa untuk memulai dan menjalankannya terlebih dahulu.Lakukan saja ini,
Rekatkan kode berikut sebagai pengganti
page = requests.get(url)
:Sama-sama :)
sumber
import time
requests
memiliki kode sendiri untuk menangani kesalahannya dan coba lagiexcept: ...
) darirequests
dansleep()
sebagai respons. Sebaliknya, mereka harus menangkaprequests.exceptions.ConnectionError
dansleep()
hanya jika pengecualian itu terjadi. (Atau lebih baik lagi, cukup gunakanRetry()
kelas builtin yang datang denganrequests
, seperti yang disarankan oleh @Score).pip install pyopenssl
sepertinya menyelesaikannya untukku.https://github.com/requests/requests/issues/4246
sumber
Saya mendapat masalah serupa tetapi kode berikut ini berhasil untuk saya.
"memverifikasi = Salah" menonaktifkan verifikasi SSL. Coba dan tangkap dapat ditambahkan seperti biasa.
sumber
Itu selalu baik untuk menerapkan penanganan pengecualian. Ini tidak hanya membantu untuk menghindari keluarnya script yang tidak terduga, tetapi juga dapat membantu untuk mencatat kesalahan dan pemberitahuan info. Saat menggunakan permintaan Python, saya lebih suka menangkap pengecualian seperti ini:
Di sini renewIPadress () adalah fungsi yang ditentukan pengguna yang dapat mengubah alamat IP jika diblokir. Anda dapat pergi tanpa fungsi ini.
sumber
ip-adrress
dengan python, apakah Anda tahu sesuatu tentang itu, lalu beri tahu sayaMenentukan proksi di lingkungan perusahaan menyelesaikannya untuk saya.
Kesalahan penuh adalah:
sumber
saya tidak dapat membuatnya bekerja di windows bahkan setelah menginstal pyopenssl dan mencoba berbagai versi python (sementara itu berfungsi dengan baik pada mac), jadi saya beralih ke urllib dan bekerja pada python 3.6 (dari python .org) dan 3.7 (anaconda )
sumber
Ketika saya sedang menulis skrip uji browser selenium, saya menemukan kesalahan ini ketika menelepon
driver.quit()
sebelum penggunaan panggilan JS api. Ingat bahwa berhenti dari webdriver adalah hal terakhir yang harus dilakukan!sumber
Menambahkan pengalaman saya sendiri untuk mereka yang mengalami ini di masa depan. Kesalahan spesifik saya adalah
Ternyata ini sebenarnya karena saya telah mencapai jumlah maksimum file terbuka di sistem saya. Itu tidak ada hubungannya dengan koneksi yang gagal, atau bahkan kesalahan DNS seperti yang ditunjukkan.
sumber
Menambahkan pengalaman saya sendiri:
ketika saya mencoba mengunduh file yang ditentukan di url.
Kesalahannya adalah
Saya memperbaikinya dengan menambahkan
verify = False
fungsi sebagai berikut:sumber
Tambahkan tajuk untuk permintaan ini.
sumber