Python2.7。访问 HTTPS 网站并检索内容 [重复]
Posted
技术标签:
【中文标题】Python2.7。访问 HTTPS 网站并检索内容 [重复]【英文标题】:Python2.7. Access an HTTPS Website and retrieve content [duplicate] 【发布时间】:2018-11-26 14:42:57 【问题描述】:大家早上好,
我一直在尝试通过 HTTPS 的 Python 2.7 访问网站,但无法访问其内容,并且几天的研究也没有帮助。 网址是:https://www.cioh.org.co/。在 Python 中,我希望能够访问页面并检索所有 html 内容。过去,我会使用 ssl 模块并在顶部添加以下代码行:
导入 ssl ssl._create_default_https_context = ssl._create_unverified_context
这一次,这不起作用,我收到错误:SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:661) 将 requests 模块与 requests.get('https://www.cioh.org.co/') 一起使用时
来自某些网站,一些人指出要使用: 导入请求 r = requests.get(URL,验证=假) 打印 r.text
我也尝试过,但它实际上并没有抓取内容。它只是从网站中检索内部标题信息,如下所示:
<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>
打印的回复与网站完全不同。通过无数的研究,我尝试使用 certifi 模块。我还安装了 OpenSSL 并提取了 .crt、.key 和 .pem 文件(并尝试使用它们),但仍然没有运气。如果需要,我可以扩展我所做的进一步研究。
如果使用任何浏览器都可以轻松访问该网站。任何帮助将不胜感激。
旁注:这是我第一次创建帐户并提出问题。如果我有什么不清楚的地方,请告诉我。提前致谢。
【问题讨论】:
这不是“内部标题”,实际上是整个 HTML 文档。然后,您的浏览器会执行链接后面的 javascript 代码;你在浏览器中看到的就是结果。这是一个常见问题解答。 【参考方案1】:从响应中的Incapsula_Resource
判断,您的请求被WAF阻止了。
您可以尝试更改 requests.get
调用中的用户代理字符串,使其看起来更像普通浏览器,但网站所有者显然不希望自动脚本抓取他们的页面。
【讨论】:
quora.com/…【参考方案2】:显然你的代码必须以某种方式模仿浏览器,所以我认为你可以这样做:
from selenium import webdriver
def scrape_page(url):
browser = webdriver.Firefox()
browser.get(url)
content = browser.page_source
browser.close()
return content
if __name__ == "__main__":
print(scrape_page('https://www.cioh.org.co/'))
这个实现相当笨拙,但它确实有效,我希望你能明白。
要安装它,您必须安装 geckodriver,这是instructions 的链接。要安装 selenium,只需输入:pip3 install selenium
【讨论】:
我实际上熟悉使用 selenium 和 webdriver 做一些事情。使用您提供的代码让它工作(当然在引用 webdriver 的位置之后)。不幸的是,在我将使用代码的地方,webdriver .exe 文件与策略不合作,但是,我能够使用命令提示符(然后使用 python 中的 subprocess 模块)完成我想要的操作来抓取网页.感谢您的帮助!! @Darican 总是乐于提供帮助!以上是关于Python2.7。访问 HTTPS 网站并检索内容 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
从公网通过HTTP/HTTPS访问本机localhost网站