python爬虫類面接整理
4551 ワード
どのようにjs暗号化を解決しますか?
selenium+phantomjsを用いて人工操作をシミュレートした.pyepecjsを使用してjsファイルを直接実行
リアルタイムでのアクセス:
crontabは、標準入力デバイスから命令を読み出し、後で読み取りおよび実行するために「Crontab」ファイルに格納する周期的に実行される命令を設定します.Crontabに存在する命令は、デーモンプロセスによってアクティブ化されます.crondはバックグラウンドでよく実行され、1分間隔で所定のジョブが実行されるかどうかをチェックします.このようなジョブは一般的にcron jobsになります.
scrapy-redisのワークフロー
master側はredisを介してウェブサイトの重み付けを行い,タスクのスケジューリングを行い,slave側はタスクの重み付けを開始し,重み付けしたデータをmaster側に返す.
第一:爬虫類指定redis_key、起動、開始urlを待つ.2つ目は、スクリプトを実行してredis_へkeyにstart_を埋め込むurls第三:爬虫類発見redis_keyにstart_が入っていますurls、これらのurlの4番目の取り出しを開始します:爬虫類はデフォルトのパラメータに従って、これらのurlをパッケージ化してrequestsの5番目の生成を行います:これらのrequestsをschedulerスケジューリングモジュールに送って、待機キューに入って、スケジューリングを待っています.第六:schedulerモジュールはこれらのrequestsのスケジューリングを開始し、チームを出て、爬虫エンジンに送信します.第七に、爬虫類エンジンはこれらのrequestsをダウンロードミドルウェア(header、エージェント、カスタムなど)に送って処理します.第八:処理が終わったら、Downloaderモジュールにダウンロードします.
scrapy-redis空回りとは何か、どうやって解決しますか?
空走:scrapy-redisフレームワークでは、reidsに格納されているrequestsはすでに登録されていますが、プログラムは依然として実行されています.信号マネージャにspider_を登録します.idle信号の下のspider_idle()メソッド、spider_idleトリガは、信号マネージャがこの爬虫類のspiderを呼び出すことです.idle().
爬虫類の閉鎖の鍵はspider_idle信号.spider_idle信号は爬虫キューが空の場合にのみトリガーされ、トリガ間隔は5 sである.同じ方法で、信号マネージャにspider_に対応するものを登録することもできます.idle信号の下のspider_idle()メソッド.spider_idle()メソッドでは、爬虫類を終了するための終了条件を記述します
インクリメンタルスキップ
データが登録されているURLやページの内容を利用してデータ指紋を作成し、keyとしてRedisデータベースに格納されている集合であり、爬虫類がURLやページを処理するたびにRedisデータベースに行って既に存在するかどうかをチェックし、登録内容を決定する.
逆登り措置はどのように処理しますか. user-agentの識別は、リクエストヘッダをランダムに置換することができ、scrapyの場合、ミドルウェアにランダム置換リクエストヘッダ を設定することができる.通のipは、ipプールを設定することができ、ip をランダムに置き換えることができる.クッキー、その他のリクエストヘッダ、盗難防止チェーン を設定するダイナミックデータ、バッグをつかむことができて、携帯電話の端はFiddlerを使うことができて、ウェブサイトはselemiumシミュレーションのウェブサイトにログインすることができます. 検証コードは、打コードプラットフォーム、スーパーイーグル を採用することができます
scrapyのメリットとデメリット Scrapyの利点:scrapyは非同期である;正則の代わりに可読性の強いxpathを採用する.強力な統計とlogシステム;同時に異なるurlの上を這う.shell方式をサポートし、独立したデバッグを便利にする.middlewareを書くと、統一されたフィルタを書くのに便利です.パイプでデータベースに格納します. Scrapyの欠点:pythonに基づく爬虫類フレームワークは、拡張性が比較的悪い.twistedフレームワークに基づいて、実行中のexceptionはreactorを乾かすことはなく、非同期フレームワークのエラー後に他のタスクを停止することはなく、データエラー後に気づきにくい.
よくある反爬虫類と対応方法は? Headersアンチ爬虫:ユーザから要求されたHeadersアンチ爬虫は最も一般的なアンチ爬虫戦略である.多くのサイトではHeadersのUser-Agentが検出され、一部のサイトではReferが検出されます(一部のリソースサイトの防犯チェーンはReferが検出されます).このような逆爬虫機構に遭遇した場合、直接爬虫類にHeadersを追加し、ブラウザのUser-Agentを爬虫類のHeadersにコピーすることができる.または、Refer値をターゲットサイトのドメイン名に変更します.Headersを検出する逆爬虫類については,爬虫類にHeadersを修正したり添加したりすることでうまく迂回できる. は、ユーザーの行動に基づいて虫に逆らっています.また、同じIPが短時間で同じページに複数回アクセスしたり、同じアカウントが短時間で複数回同じ操作を行ったりするなど、ユーザーの行動を検出するサイトもあります.ほとんどのサイトは前のケースですが、この場合はIPエージェントを使えば解決できます.爬虫類を専門に書いて、ネット上で公開されているエージェントipを這い取り、検出してすべて保存することができます.このようなエージェントip爬虫類はよく使われるので、自分で用意したほうがいいです.大量のエージェントipがあれば、リクエストごとにipを何回か交換することができ、requestsやurllib 2では簡単にでき、最初の反爬虫類を簡単に迂回することができます.2つ目の場合、次のリクエストは、リクエストのたびにランダムに数秒間隔で実行できます.一部の論理的な脆弱性のあるサイトでは、何度も要求したり、ログインを終了したり、再ログインしたりすることで、同じアカウントを短時間で何度も同じ要求を行うことができない制限を回避することができます. ダイナミックページの反爬虫類:上記のいくつかの状況の多くは静的ページに現れ、一部のウェブサイトではajaxリクエストによって取得されるか、JavaScriptによって生成される必要があります.まずFiddlerを用いてネットワーク要求を解析する.ajaxリクエストが見つかったり、具体的なパラメータやレスポンスの具体的な意味が分析されたりすれば、requestsやurllib 2を直接利用してajaxリクエストをシミュレートし、レスポンスのjsonを分析して必要なデータを得ることができます.ajaxリクエストを直接シミュレートしてデータを取得できるのは素晴らしいですが、ajaxリクエストのすべてのパラメータを暗号化しているサイトもあります.私たちは自分の必要なデータの要求を構築することができません.この場合、selenium+phantomJSを使用してブラウザカーネルを呼び出し、phantomJSを使用してjsを実行して人為的な操作とページ内のjsスクリプトをシミュレートします.フォームを記入してからボタンをクリックしてからページをスクロールするまで、すべてシミュレーションすることができて、具体的な要求と応答の過程を考慮しないで、ただ完全に人をページを閲覧してデータを取得する過程をシミュレーションします.このフレームワークでは、ブラウザに偽装してデータを取得するのではなく、ブラウザphantomJS自体がインタフェースのないブラウザーであり、このブラウザを操作しているのは人間ではないため、ほとんどの反爬虫類を迂回することができます.selenium+phantomJSを利用して、認識タッチ式(12306)やスライド式の検証コード、ページフォームの暴力的な解読など、多くのことができます.
selenium+phantomjsを用いて人工操作をシミュレートした.pyepecjsを使用してjsファイルを直接実行
リアルタイムでのアクセス:
crontabは、標準入力デバイスから命令を読み出し、後で読み取りおよび実行するために「Crontab」ファイルに格納する周期的に実行される命令を設定します.Crontabに存在する命令は、デーモンプロセスによってアクティブ化されます.crondはバックグラウンドでよく実行され、1分間隔で所定のジョブが実行されるかどうかをチェックします.このようなジョブは一般的にcron jobsになります.
scrapy-redisのワークフロー
master側はredisを介してウェブサイトの重み付けを行い,タスクのスケジューリングを行い,slave側はタスクの重み付けを開始し,重み付けしたデータをmaster側に返す.
第一:爬虫類指定redis_key、起動、開始urlを待つ.2つ目は、スクリプトを実行してredis_へkeyにstart_を埋め込むurls第三:爬虫類発見redis_keyにstart_が入っていますurls、これらのurlの4番目の取り出しを開始します:爬虫類はデフォルトのパラメータに従って、これらのurlをパッケージ化してrequestsの5番目の生成を行います:これらのrequestsをschedulerスケジューリングモジュールに送って、待機キューに入って、スケジューリングを待っています.第六:schedulerモジュールはこれらのrequestsのスケジューリングを開始し、チームを出て、爬虫エンジンに送信します.第七に、爬虫類エンジンはこれらのrequestsをダウンロードミドルウェア(header、エージェント、カスタムなど)に送って処理します.第八:処理が終わったら、Downloaderモジュールにダウンロードします.
scrapy-redis空回りとは何か、どうやって解決しますか?
空走:scrapy-redisフレームワークでは、reidsに格納されているrequestsはすでに登録されていますが、プログラムは依然として実行されています.信号マネージャにspider_を登録します.idle信号の下のspider_idle()メソッド、spider_idleトリガは、信号マネージャがこの爬虫類のspiderを呼び出すことです.idle().
def spider_idle(self):
"""Schedules a request if available, otherwise waits."""
# XXX: Handle a sentinel to close the spider.
self.schedule_next_requests() # schedule_next_requests() redis
raise DontCloseSpider # DontCloseSpider ,
爬虫類の閉鎖の鍵はspider_idle信号.spider_idle信号は爬虫キューが空の場合にのみトリガーされ、トリガ間隔は5 sである.同じ方法で、信号マネージャにspider_に対応するものを登録することもできます.idle信号の下のspider_idle()メソッド.spider_idle()メソッドでは、爬虫類を終了するための終了条件を記述します
インクリメンタルスキップ
データが登録されているURLやページの内容を利用してデータ指紋を作成し、keyとしてRedisデータベースに格納されている集合であり、爬虫類がURLやページを処理するたびにRedisデータベースに行って既に存在するかどうかをチェックし、登録内容を決定する.
逆登り措置はどのように処理しますか.
scrapyのメリットとデメリット
よくある反爬虫類と対応方法は?