我有一個簡單的屏幕抓取例程獲得通過BeautifulSoup HTML頁面,使用代理爬行服務(Scrapinghub):URL請求使用Python失敗 - 找不到SSL證書
def make_soup(self,current_url):
soup = None
r = requests.get(current_url, proxies=self.proxies, auth=self.proxy_auth,
verify='static/crawlera-ca.crt')
if r.status_code == 200:
soup = bs4.BeautifulSoup(r.text, "html.parser")
if soup:
return soup
return False
當我上運行一個http://網站它正常工作。
當我在https運行它://網站它返回:
Traceback (most recent call last):
File "/home/danny/Documents/virtualenvs/AskArbyEnv/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 295, in ssl_wrap_socket
context.load_verify_locations(ca_certs, ca_cert_dir)
FileNotFoundError: [Errno 2] No such file or directory
甚至離奇的是,它的工作原理,當我在單元測試運行它訪問同一個https://開頭的網站。
單元測試和運行代碼之間唯一改變的是我追加到我傳遞給'make_soup'的URL的搜索項。每個生成的URL都是格式良好的,我可以在瀏覽器中訪問它們。
這讓我覺得它不能與丟失的SSL證書有關。那麼爲什麼它似乎在抱怨它無法找到證書文件呢?
感謝您的支持。該文件在磁盤上,但事實證明,它突然停止工作的原因是因爲我將包含'make_soup'的python文件移動到較低級別的文件夾。改成'verify ='../static/crawlera-ca.crt')'解決了這個問題。 – RubyNoob
結果Crawlera正在檢查您的所有流量,併爲您連接的所有站點頒發證書。在這種情況下,'crawlera-ca.crt'是必要的。但請注意,他們可以閱讀與第三方網站交換的任何私人數據。 – randomir