web-dev-qa-db-ja.com

PythonでIncapsulaをバイパスする方法

Scrapy を使用し、スクレイプしようとします このサイトIncapsulaを使用します

<meta name="robots" content="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3">
</script>

私はすでに2年前にこの問題について Question を尋ねていましたが、この方法( Incapsula-Cracker )はもう機能しません。

私は理解しようとしました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 

しかし、私は 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>
11
parik

したがって、まず第一に、そのような問題に対する絶対確実な解決策はありません。私は実際のユーザーとして、StackOverflowで回答する際にキャプチャを解決する必要があります。つまり、ボットは間違いなくキャプチャを取得します。

今、キャプチャの可能性を減らすために私が試し、従ういくつかのルールがあります

  • そのようなプロジェクトに共有プロキシを使用しないでください。 TORの使用は大きなNOです
  • Chrome + Selenium + Proxyを使用します
  • Chrome with existing profile。私は、さまざまなWebサイトの閲覧履歴、他の多くのサイトやトラッカーからのCookieを持ち、1か月前に遡るプロファイルを持つことを好みます。ユーザー/ボットの違いの評価がどのように行われるかはわかりません。本当のユーザーのようになりたい
  • 速い速度でこすらず、可能な限り多くの遅延と可能な限りランダムな遅延を使用してください
  • 常に表示されているブラウザを使用してキャプチャを監視し続け、キャプチャが表示されたらキャプチャを手動で解決するか、DeathByCaptchaまたは同様のサービスを使用します。キャプチャページを中断しないようにしてください。ボットの確率チェックがより高いグレードになる可能性があります。

これはネコとネズミのゲームで、相手が防御として何を持っているかわからない。素敵で簡単にプレイしよう

4
Tarun Lalwani

これは最良の答えではありませんが、ウェブスクレイピングを行うのが簡単ではない理由を理解するためにいくつかのポイントを与えるだけで、主にCDNを持っている場合です。

最初に、あなたが何と戦うかをチェックするのが良いかもしれません [〜#〜] waf [〜#〜]Bot Mitigation

次に、より多くのアイデアを得るために、これは良い話です: 攻撃者がCDNを回避してオリジンを攻撃する方法

これは、Webスクレイピングを実行できないことを意味するものではありません。ここでの問題は時間/速度に減少します。キャプチャをトリガーする変更は、高速に試行するほど速くなり、最悪の場合は完全にブロックされます。

リクエストごとに異なるIPを使用するなど、複数のアプローチがあります。 Python Torを使用してリクエストを作成 、ユーザーエージェントを変更するなど)。あなたが見つける必要があるかもしれない定義されたタイムアウトとクエリパターンの。

2
nbari