Python으로 Heathrow 보상 사이트에 연결하려고합니다 . RoboBrowser
라이브러리 를 사용하여 페이지에서 데이터를 긁어 내려고하는데 연결 시도에서 ReadTimeout
오류가 발생합니다. 이 작업을 수행 한 다른 모든 URL (예 : Waterstones, Maximiles)은 잘 작동했습니다.
requests
및 urllib
라이브러리 와 연결을 시도 했으며 둘 다에서 동일한 결과를 얻었습니다.
문제가 SSL 확인과 관련이 있다고 생각하여 비활성화했지만 아무것도 변경하지 않았습니다.
내가 언급 한 라이브러리 중 하나에서 위의 URL에 연결하여 문제를 복제 할 수 있습니다.
from robobrowser import RoboBrowser
browser = RoboBrowser()
browser.open('https://rewards.heathrow.com')
질문에 대한 의견이 제안했듯이 이것은 SSL 버전 문제였습니다. 해결책은 다음과 같이 어댑터 클래스를 만드는 것이 었습니다. Choosing The SSL Version In Python Requests .
문제를 해결하는 데 사용한 코드는 다음과 같습니다.
class SSLAdapter(HTTPAdapter):
def __init__(self, ssl_version=None, **kwargs):
self.ssl_version = ssl_version
self.poolmanager = PoolManager()
super().__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = PoolManager(num_pools=connections,
maxsize=maxsize,
block=block,
ssl_version=self.ssl_version)
그런 다음 RoboBrowser 인스턴스를 만들 때 :
s = Session()
s.mount('https://', SSLAdapter(_ssl.PROTOCOL_TLSv1))
self.browser = RoboBrowser(parser="lxml", session=s, user_agent=user_agent)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다