我有一个简单的屏幕抓取例程获得通过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