Harap bersabar karena saya cukup baru dengan Python dan github secara umum.
Saya telah menggunakan permintaan untuk mengikis data dari Play Store. Saya perlu membuat sejumlah besar permintaan (sekitar 20k). Ini berfungsi dengan baik untuk sekitar 3000-4000 permintaan tetapi macet setelah itu (Kesalahan SSL). Saya tidak terbiasa dengan SSL dan permintaan, jadi saya tidak tahu apa penyebabnya.
Kesalahan:
(SSLError Traceback (most recent call last)
<ipython-input-23-1da544640d89> in <module>()
53 time.sleep(0.1)
54
---> 55 r = requests.get('https://play.google.com' + link + '&hl=en')
56 link_tree = html.fromstring(r.content)
57 description = link_tree.xpath('//div[@jsname="C4s9Ed"]/text()') + link_tree.xpath('//div[@jsname="C4s9Ed"]/p/text()')
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\api.pyc in get(url, params, **kwargs)
65
66 kwargs.setdefault('allow_redirects', True)
---> 67 return request('get', url, params=params, **kwargs)
68
69
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\api.pyc in request(method, url, **kwargs)
51 # cases, and look like a memory leak in others.
52 with sessions.Session() as session:
---> 53 return session.request(method=method, url=url, **kwargs)
54
55
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
466 }
467 send_kwargs.update(settings)
--> 468 resp = self.send(prep, **send_kwargs)
469
470 return resp
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\sessions.pyc in send(self, request, **kwargs)
574
575 # Send the request
--> 576 r = adapter.send(request, **kwargs)
577
578 # Total elapsed time of the request (approximately)
C:\Users\Nathan\AppData\Local\Enthought\Canopy\User\lib\site-packages\requests\adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
445 except (_SSLError, _HTTPError) as e:
446 if isinstance(e, _SSLError):
--> 447 raise SSLError(e, request=request)
448 elif isinstance(e, ReadTimeoutError):
449 raise ReadTimeout(e, request=request)
SSLError: EOF occurred in violation of protocol (_ssl.c:590) )
The-efi, di github ini, tampaknya memiliki masalah yang sama di utas ini: https://github.com/kennethreitz/requests/issues/3006 (lihat di bawah, dia bukan OP) tetapi saya tidak dapat menemukan utas yang dia buka untuk bantuan lebih lanjut. Saya menggunakan Python 2.7. demikian juga.
Saya telah terjebak dalam hal ini cukup lama sekarang dan saya tidak dapat menemukan jawaban apa pun di sini atau StackOverflow (jawabannya mungkin tepat di bawah hidung saya, tetapi saya kesulitan memahaminya karena kurangnya pengetahuan saya dalam SSL & permintaan) .
Terima kasih sebelumnya atas bantuan Anda, dan maaf jika ada yang kurang jelas -- beri tahu saya.
Ketika Anda mengatakan Anda macet, apakah hanya pengecualian yang menyala? Atau apakah permintaan tindak lanjut tidak berfungsi? Saya bertanya karena kesalahan jaringan sementara _do_ terjadi, dan jika Anda membuat banyak permintaan web, Anda harus mempertimbangkan untuk menerapkan semacam logika coba lagi di hadapannya.
Pengecualian menyala. Permintaan tindak lanjut tampaknya berhasil, tetapi saya belum mencoba menerapkan coba lagi. Saya takut saya melanggar aturan membuat terlalu banyak permintaan ke server atau sesuatu, saya kira.
Saya pasti akan mencobanya dan memperbarui utas ini. Terima kasih!
Baik untuk apa nilainya, karena Anda menggunakan requests.*
Anda menempatkan diri Anda pada risiko yang lebih besar untuk membebani sumber daya jaringan antara Anda dan server. Anda harus mencoba menggunakan session .
Bagi siapa pun dengan masalah ini:
Saya telah memperbaikinya dengan mengikuti saran @Lukasa dan menambahkan ini tepat setelah mengimpor permintaan:
import requests
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries = 20)
sess.mount('http://', adapter)
Kemudian, di mana saya menggunakan requests.get()
sebelumnya, saya menggunakan sess.get()
.
Semoga ini bisa membantu, dan terima kasih atas bantuan Anda @Lukasa !
Saya memiliki pesan kesalahan yang persis sama, masalahnya adalah saya tidak menginstal ndg-httpsclient
@variabel Saya menginstal ndg-httpsclient tetapi kesalahan yang sama
Komentar yang paling membantu
Saya memiliki pesan kesalahan yang persis sama, masalahnya adalah saya tidak menginstal ndg-httpsclient
https://github.com/kennethreitz/requests/issues/3605