par*_*rik 11 python recaptcha scrapy incapsula
我使用Scrapy,我试图刮掉这个使用Incapsula的网站
<meta name="robots" content="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3">
</script>
Run Code Online (Sandbox Code Playgroud)
我已经问了一个问题关于这个问题2年前,但这种方法(Incapsula-饼干)不工作了.
我试图理解Incapsula是如何工作的 ,我试图绕过它
def start_requests(self):
yield Request('https://courses-en-ligne.carrefour.fr', cookies={'store': 92}, dont_filter=True, callback = self.init_shop)
def init_shop(self,response) :
result_content = response.body
RE_ENCODED_FUNCTION = re.compile('var b="(.*?)"', re.DOTALL)
RE_INCAPSULA = re.compile('(_Incapsula_Resource\?SWHANEDL=.*?)"')
INCAPSULA_URL = 'https://courses-en-ligne.carrefour.fr/%s'
encoded_func = RE_ENCODED_FUNCTION.search(result_content).group(1)
decoded_func = ''.join([chr(int(encoded_func[i:i+2], 16)) for i in xrange(0, len(encoded_func), 2)])
incapsula_params = RE_INCAPSULA.search(decoded_func).group(1)
incap_url = INCAPSULA_URL % incapsula_params
yield Request(incap_url)
def parse(self):
print response.body
Run Code Online (Sandbox Code Playgroud)
但我被重定向到RE-Captcha Page
<html style="height:100%">
<head>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>
<body style="margin:0px;height:100%">
<iframe src="/_Incapsula_Resource?CWUDNSAI=27&xinfo=3-10784678-0%200NNN%20RT%281523525225370%20394%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B12%284%2c316%2c0%29%20U10000&incident_id=459000960022408474-41333502566401539&edet=12&cinfo=04000000" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 459000960022408474-41333502566401539
</iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Tar*_*ani 12
所以首先,对于此类问题没有万无一失的解决方案。我作为一个实际的用户最终不得不在 StackOverflow 上回答时解决验证码。这意味着机器人肯定会得到验证码。
现在我尝试并遵循一些规则来减少验证码的机会
TOR是一个大NOChrome+ Selenium+Proxyexisting profile. 我更喜欢拥有不同网站的浏览历史记录、来自许多其他网站和跟踪器的 cookie 以及回溯一个月的个人资料。您不知道如何评估用户/机器人差异。所以你想看起来更像一个真正的用户这是一个猫捉老鼠的游戏,你不知道对方有什么作为防御。所以你试着玩得轻松愉快
这不是最好的答案,但只是给出一些要点来理解为什么进行网络抓取并不那么容易,而且主要是在前面有 CDN 的情况下。
首先,也许最好检查一下您将要对抗的对象:WAF和机器人缓解。
然后为了获得更多想法,这是一个很好的演讲:攻击者如何规避 CDN 来攻击源
现在,这并不意味着不可能进行网络抓取,这里的问题现在减少到时间/速度,你尝试的速度越快,你就会触发验证码,在最坏的情况下甚至会被完全阻止。
有多种方法,例如每个请求使用不同的 IP:使用 Python 通过 Tor 发出请求、更改用户代理等。但大多数方法都绑定到一组定义的超时和您可能需要找到的查询模式。