我正在尝试抓取一个网站,但是我遇到了403禁止的问题(这意味着他们阻止了我),我该如何解决此问题?
from bs4 import BeautifulSoup
from selenium import webdriver
options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(options=options)
#url: the website that i wanna scrape
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
print(soup)
我收到此错误消息:
<pre><html><head><title>You have been blocked</title><style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}</style></head><body style="margin:0"><script async="" src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&amp;ns=1&amp;cb=749975105" type="text/javascript"></script><script>var dd={'cid':'AHrlqAAAAAMAcW1trsuCoDEAXu-3KQ==','hsh':'53505CB4534F4422CC81E4A9499234','t':'fe'}</script><script src="https://ct.datado.me/c.js"></script><iframe border="0" frameborder="0" height="100%" scrolling="yes" src="https://c.datado.me/captcha/?initialCid=AHrlqAAAAAMAcW1trsuCoDEAXu-3KQ%3D%3D&amp;hash=53505CB4534F4422CC81E4A9499234&amp;cid=09ccOuPGIGlqdUvFNJgB7GzPDCFBmdMIU8Ng~E~1M6.&amp;t=fe " style="height:100vh;" width="100%"></iframe><script type="text/javascript">
//<![CDATA[
(function() {
var _analytics_scr = document.createElement('script');
_analytics_scr.type = 'text/javascript'; _analytics_scr.async = true; _analytics_scr.src = '/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=1&cb=749975105';
var _analytics_elem = document.getElementsByTagName('script')[0]; _analytics_elem.parentNode.insertBefore(_analytics_scr, _analytics_elem);
})();
// ]]>
</script>
</body></html>
</pre>
答案 0 :(得分:1)
HTTP 403 Forbidden
客户端错误状态响应代码表示服务器已接收到请求,但客户端未获得授权,也没有对该内容的访问权限。
此状态类似于401
,但是在这种情况下,重新认证不会有任何区别。永久禁止访问并将访问与应用程序逻辑绑定在一起,例如对资源的权限不足。
HTTP/1.1 403 Forbidden
Date: Sun, 16 June 2019 07:28:00 GMT
无头 Chrome 浏览器有很多检测方法,其中一些主要因素包括:
User agent
Plugins
Languages
WebGL
Browser features
Missing image
您可以在Selenium and non-headless browser keeps asking for Captcha
中找到详细的讨论
一个通用的解决方案是使用来自Free Proxy List的代理或旋转代理。
中找到详细的讨论