Pythonのインタビュー2

1、大規模なデータファイルの読み込み

 

 

  1.  使用して発電機の発電機
  2. ファイルの行のために:のIteratorを反復

2、イテレータと発電機との間の差

 

  1. イテレータは、より抽象的な概念であり、任意のオブジェクト、それは次のクラスであれば、独自のメソッドを持っており、この方法は、ITERを返します。等コンテナオブジェクト列、リスト、辞書、タプル、このタイプのため、それは便利であるループ反復のために使用しました。声明の背景は、()関数で、ITERを呼び出すには、コンテナオブジェクトのITER()はPythonの組み込み関数です。ITER()は個別のコンテナ内のコンテナ要素内でアクセスイテレータオブジェクトの定義された次の()メソッドを返し、構築された次の()関数は、Pythonです。後続の要素が存在しない場合には、次の()StopIterrationの例外をスローします。
  2. ジェネレーター(発電機)はイテレータを作成するためのシンプルかつ強力なツールです。彼らは、通常の関数のように書かれたが、データを返すために必要な時間でyield文を使用しています。次回のたびに()が呼び出されるとは、発電機は、外の(それは文が実行される最後の時間とすべてのデータ値を記憶位置)の位置に戻します

相違点:Builderはイテレータを行うことができるすべてのことを行うだけでなく、(__ __iter自動的に作成)とnext()メソッド、発電機が特に簡単であるが、また、高効率の発電機、代わりにリストをジェネレータ式を使用することができます理解は、同時にメモリに保存することができます。作成及び発電を終了する際に自動的に生成されているプログラムの状態を維持することに加えて、それが自動的にStopIterration例外を実行しました。

 

3.役割と機能デコレータ

 

  • ログの導入
  • 関数の実行時間の統計情報
  • お金の準備処理の関数の実行
  • 関数が実行された後に機能をクリーニング
  • チェック権限と他のシーン
  • キャッシュ

次のGIL約4、簡単な話

グローバルインタプリタロック(グローバルインタプリタロック)

    制御する(また、インタプリタメインループ、CPythonのバージョンとして知られている)仮想マシンで実行されるPythonのPythonコード、パイソンは、つまり、実行中の唯一のスレッド、インタプリタのメインループであることを考慮して任意の時間に設計されましたインタプリタで実行している一つのスレッドだけ。Pythonの仮想マシンへのアクセスは、グローバルインタープリタロック(GIL)によって制御され、それがこのロックが一つだけのスレッドが実行されていることを保証しています。

 

マルチスレッド環境では、Pythonの仮想マシンは、次の方法を実行します。

1.設定GIL

実行するためのスレッドに切り替え

3.実行します:

    A。バイトコード命令の数を指定しますか、

    b。コントロールにスレッドイニシアティブ(あなたはtime.sleep呼び出すことができます(0))

4.スリープ状態にスレッドを入れて

5.ロック解除GIL

6.上記の手順のすべてを再び繰り返し

GILは(何のPythonバイトコードが存在しないため、この期間中に実行されているので、スレッド切り替えはありません)関数が終了するまでロックされますと言うとき、そして、(例えばC / C ++拡張機能など)の外部コードを呼び出します。

 

5、見つけるとgrep

grepコマンドは、すべてのコンテンツの文字列はテキストファイル検索モードを許可する、正規表現することができgrepし、強力なテキスト検索ツールです。マッチングパターンが見つかった場合、grepのパターンを含むすべての行を印刷します。

一般的に、特定のディレクトリに適格なファイルを検索するために使用見つける、また、ファイルの特定のユーザーの所有者を検索するために使用することができます。

 

6、オンラインサービスは、様々な原因による行う方法をハングアップすることができますか?

Linuxの管理ツール責任者のバックグラウンド・プロセス

各ファイルは、Linuxで再起動supervisordサービスを実行するように変更した後

 

パイソンの動作効率を向上させる方法7、

    発電機を使用して、キーコード(Cython、pylnlne、pypy、パイレックス(登録商標))を用いて、外部関数パッケージ、ループの最適化 - サイクル内のプロパティ変数のアクセスを回避するため

 

8、一般的に使用されるLinuxのコマンド

    LS、ヘルプ、CD、より多くの、明確な、MKDIR、PWD、RM、grepを、見つける、MV、SU、日付

 

9、収率のPythonの使用

    それは関数が返す最後の時間を覚えている位置で機能するように収率は、単に発電機です。第二の(又はn回)関数呼び出しのジャンプを生成します。

 

10、Pythonはどのようにメモリ管理であります

まず、ガベージコレクション:

    C ++、および他の言語とは異なりPythonは、Javaのように、彼らは事前に直接変数割り当てのタイプを、変数を宣言することはできません。実行時間とメモリの言語、オブジェクトタイプの面でPythonが決定されます。我々は(ここでは、我々は動的型付け言語は、単純に自動的に変数の型と変数の割り当てを決定し、実行時にメモリアドレスの変数割り当てに起因することができます)Python言語は動的な理由を入力されて呼び出すのはこのためです。

第二に、参照カウント:

    同じWindowsカーネルを使用してPythonはメモリを管理するための同様の方法をオブジェクト。オブジェクト参照を指すのカウントを維持し、各オブジェクト、。変数がオブジェクトにバインドされると、変数の参照カウントは、1である(それ以外の場合に増加カウント変数参照につながる)、システムは自動的にこれらのタグを維持し、走査のタイミング、場合ラベル参照カウントが0になったときに、オブジェクトが復元されます。

第三に、メモリプールのメカニズム

    ピラミッドへのPythonのメモリメカニズム:

    -1、-2、主オペレーティングシステム層動作;

    層0は、Cのmalloc、無料で他のメモリの割り当てと割り当て解除機能動作です。

    第一層及び第二層は、メモリ・プールである、Pythonは、この層の目的は、直接割り当てられたメモリの256バイト未満である場合に実装するインターフェース機能PyMem_Malloc機能を有しています。

    第3の層は、我々がPythonオブジェクトの動作を指示、つまり、最上層です。

ときCのmallocと無料通話頻繁場合は、パフォーマンスの問題を生み出す頻繁メモリ割り当てと結合され、破片の小片を解放するメモリを生成します。

ここでの主に仕事をしているのpythonは、以下のとおりです。

独自のメモリ管理システムの使用上の1と256バイトのメモリの要求の割り当ては、直接malloc関数を使用している場合。

ここでは、まだメモリを割り当てるためにmalloc呼び出しますが、毎回、彼はメモリの256バイトのチャンクサイズを割り当てるために戻ります。

 

メモリプールメモリを介して登録が最終的にメモリプールに再循環させる、および次の使用のために、無料のCが安心呼び出すことはありません。そのような他の変数Bに話す値、文字列、タプル(タプルを変更することを許可されていない)複製方法(ディープコピー)で使用され、すなわち、のような単純なオブジェクトのためのPythonは、変数Aに割り当てられているAおよびBのメモリ空間は同じままですが、A、AとBのアドレスにスペースの変更、再割り当ての値はもはや同じであるとき。

 

11、配列、リンクリスト、キュー、スタックの違いを説明?

アレイデータ記憶概念、連続空間に格納されたデータの配列、およびリンクされたリストデータのリストは非連続領域に格納されてもよいです。

スタックとキューは、データアクセスモード、FIFOキューの概念的な説明であり、スタックはLIFOで、スタック、キューは、アレイに実装することができるリンクされたリストの実装を使用することもできます。

 

12は、あなたには、いくつかの並べ替えを知って、あなたは最も身近な種類の話を?

 

ウェブフレーム部

1.djangoアプリケーションサーバでの場合はユーザーがログイン(ログイン状態を入力してください)、その後、次の要求がnginxのあるどのような影響アプリケーションサーバBへのプロキシが表示されますか?

ユーザーログインセッションデータはその前に、アプリケーションサーバBに共有されていない場合は、サーバ・アプリケーションは、ログインしているユーザがいません。

2.クロスドメインリクエストは(原則)の問題を解決する方法ジャンゴ

ミドルウェアを有効にします

ポスト要求

検証コード

形で添加{%csrf_token%}タグ

 

3. Djangoフレームワークを説明したり、記述してください。

MVCデザインに従い、独自の用語を持っているDjangoフレームワークの場合:MVT

Mは、スペルモデルであり、Mは、同じ機能MVC、データ処理を担当する、埋め込みORMフレームワークであります

ビューのVスペルと同じMVCにおけるC関数、HttpRequestの受信、サービス処理は、HttpReponseを返します

Tテンプレートとして綴り、およびMVC同じ機能でV、返されるHTMLパッケージ構造を担当する、埋め込まれたテンプレートエンジン

 

4.djangoデータクエリを実行する方法結果の並べ替え、降順でそれを行う方法を、クエリがどのように行うには、フィールドよりも大きくなっています

ソートORDER_BY使用して()

ソートフィールド名を降順前に必要な -

クエリ・フィールドは、特定の値より大きい:フィルタ(フィールド名_gt =値)を使用し

 

ジャンゴ、ミドルウェアミドルウェアの役割について5話?

ミドルウェアは、処理要求と応答処理、比較的軽量、及びグローバルジャンゴの入力と出力の変化との間に介在しています

 

6.あなたはDjangoのを知っていますか?

Djangoは大きく、方向が行くように、それは完全に自動化された管理背景で最もよく知られている、唯一のORMを使用する必要があり、単純なオブジェクトの定義を行うと、自動的にデータベース構造と同様に、フル機能の管理の背景を生成することができます。

フレームワーク内の他のモジュールと結合された内蔵DjangoのORMの高度

アプリケーションは、そうでなければ、フレームワーク内で提供その利便性に基づいてORMのすべての種類を楽しむことができない、組み込みのDjangoのORMを使用する必要があります。ORMモジュールのスイッチをオフにすることは理論的には可能であるが、これは改装改装家の解体を取ることと等価である、スタートを作る方がよいと新しく改装された空白の部屋に行きましたでしょう。

 

流れが一定のサイズに達した後、彼らは性能要件を満たすために再構築する必要がある、Djangoのプロジェクトを使用して、Djangoのセールスポイントは、その性能が限られている拡張し、超高効率の開発です。

Djangoは、中小のサイトに適しているか、などの大規模なサイトはすぐに製品のプロトタイプツールを達成します。

Djangoテンプレート設計哲学は完全コード、スタイルの分離であり、Djangoは基本的にデータを処理することができる、テンプレートでエンコードなくします。

 

7. Djangoは、あなたがどのように達成したのリダイレクト?コードでのステータスは何ですか?

HttpResponseRedirectを使用してください

redireと逆

ステータスコード:302、301

 

8.ngnixフォワードプロキシとリバースプロキシ?

フォワードプロキシサーバは、オリジンサーバからコンテンツを取得するために、クライアントとオリジンサーバ(オリジンサーバ)との間に配置され、クライアントがプロキシに要求を送信し、宛先(オリジンサーバ)を指定し、プロキシサーバーと元に要求を送信しますコンテンツは、クライアントに戻されます。クライアントは、フォワードプロキシを使用するためにいくつかの特別な設定を行う必要があります。

逆にリバースプロキシは、それがオリジンサーバの観点からクライアントのようなもので、クライアントは、特別な設定は必要ありません。クライアントが要求を送信する場合(元のサーバ)を決定するためにリバースプロキシに続くリバースプロキシネームスペース通常の要求の内容を送信し、自身のオリジナルコンテンツであるように、クライアントが利用可能なコンテンツを返します同じの。

 

9.トルネードのコアは何ですか?

コアは、後者のソケットは、非ブロッキングをカプセル化し、前者は非常に効率的なI / Oイベントサイクルを提供し、トルネードのiostream ioloop及びこれら二つのモジュールです。ioloopするためのネットワークI / Oイベントを追加することにより、非ブロックソケットの使用は、その後、適切なコールバック関数では、効率的な非同期実行の夢を達成することができます。

 

展開しない理由10.Django自体は、そのrunserverを提供しますか?

 

ジャンゴをデバッグモードで動作させる場合のrunserver方法がしばしば使用されている、それはジャンゴが付属しています

WSGIサーバーのランニングは、主にテストと開発に使用される、および方法は、単一のプロセスのrunserver開いています。

 uWSGIはWSGIプロトコル、uwsgi、HTTPおよびその他のプロトコルを実装するWebサーバーです。uwsgiは、通信プロトコルであり、Webサーバの実装はuWSGI uwsgi WSGIプロトコルとプロトコルであることに注意してください。uWSGI超高速パフォーマンスなど、低メモリフットプリントと、複数のアプリ管理、およびnginxのと

生産環境があり、ユーザーがリクエストにアクセスして、アプリケーションのアプリ、実際の展開を分離することができます。比較して言えば、より高い並行性支持体は、改善された性能の利点を果たし、マルチプロセス、マルチコアの管理を容易にします。

 

ネットワークプログラミングと前端部

 

 

何1.AJAX、どのようにAJAXを使用するには?

AJAX(非同期JavaScriptとXML)は、代わりにページ全体をリロードのローカルページのデータを更新することができます。

まず、のXMLHttpRequestオブジェクト、VaRのXMLHTTP =新規のXMLHttpRequest()を作成し、XMLHttpRequestオブジェクトは、サーバとデータを交換するために使用されます。

オブジェクトのXMLHttpRequestが開いて使用して、第2のステップ、()および()メソッドを送信するサーバにリソース要求を送信します。

第3のステップと、オブジェクトのXMLHttpRequest responseTextのresponseXMLプロパティを使用して、または応答を受信します。

第四段階、onreadystatechangeに機能、サーバーにリクエストを送信し、我々はあなたがonreadystatechangeに機能を使用するために必要な機能の一部を実行するサーバの応答は、それぞれの時間はreadyStateのXMLHttpRequestオブジェクトの変更はonreadystatechangeに機能をトリガします。

2.一般的なHTTPステータスコードは何?

200 OK

301永久移動します

発見302

304は変更されません

307一時的なリダイレクト

400不正な要求

401無許可

403禁止します

404お探しのページが見つかりませんでした

410ゴーン

500内部サーバーエラー

501実装されていません

3.ポストとの違いを取得しますか?

図1に示すように、GET要求、要求されたデータは?URLに、URLに付加し、分割されたデータを送信する、複数のパラメータと接続されます。URLエンコード形式は、ASCIIエンコーディングの代わりに、ユニコードを使用し、次にそれは、符号化されるすべての非ASCII文字の後に言うことです移します。

POSTリクエスト:データパケットを要求しますPOSTリクエストはHTTP要求パケットのボディに配置されます。上記項目は=帯鋸は、実際のデータ送信です。

そのため、要求されたGETデータは、アドレスバーに公開され、POSTリクエストはしていません。

 

図2に示すように、データ送信のサイズ

HTTPの仕様では、URLの送信データの長さや大きさに制限はありません。しかし、実際の開発プロセスでは、GETのために、特定のブラウザとサーバは、URLの長さに制限があります。GETリクエストを使用する場合したがって、送信データは、URLの長さによって制限されます。

POSTの場合、URLは伝統的な価値観ではないので、理論的には、限定されないが、実際には各サーバーがPOSTのサイズを制限するために、データの提出が必要になりますは、Apache、IISは、独自の構成を有しています。

 

3、セキュリティ

セキュリティは、GET、POSTよりも高くなっています。ここでのセキュリティが本当のセキュリティで、セキュリティ方法は、上記GETセキュリティ、安全性だけでなく、上記の修正されたデータ・サーバとは異なります。お使いのブラウザの履歴を表示するには、ブラウザのキャッシュや他の理由があるかもしれないので、例えば、ログイン操作時に、GETリクエストによって、ユーザー名とパスワードは、長いURL、ログインページに公開されます、ユーザー名とパスワードは非常に簡単であり、その場合には他の人が得ました。また、データ提出要求はまた、クロスサイトリクエストfrogery攻撃を引き起こす可能性がGET。

 

4.cookieセッションとの違いは?

1は、Cookieデータは、顧客のブラウザ、サーバー上のセッションデータに保存されています。

2は、クッキーは非常に安全ではない、人々はCOOKIEクッキーチートと安全性を考慮したセッションの使用を取る必要があり、ローカルに保存された分析することができます。

図3に示すように、セッションは、一定期間内にサーバに保存されます。増加は、より多くのサーバーのパフォーマンスを軽減考慮して、サーバーのパフォーマンスを占めるだろうにアクセスするときには、クッキーを使用する必要があります。

図4に示すように、格納されたデータが4Kを超えることができない単一のクッキーは、多くのブラウザは、クッキーを保存した20の部位の最大値に制限されています。

5は、推奨:
   ログイン情報やその他の重要な情報がセッションとして保存され
   、必要に応じて追加的な情報は、COOKIEに配置することができます

 

5.必要に応じて簡単なTCPサーバープロセスを作成します。

ソケットを作成1.socket

IPとポートをバインド2.bind

ソケットは受動的なリンクになることができ3.listen

4.accept WAITクライアント

5.recv /データ送受信を送ります

 

爬虫類やデータベースの一部

 

 

1.scrapyとscrapy-Redisの違いは何ですか?なぜRedisのデータベース?

1)scrapyは、高効率、カスタマイズ度の高いクロール、Pythonのフレームワーク爬虫類であるが、分散をサポートしていません。scrapy-Redisのは、scrapyフレームワーク上で実行されているデータベースコンポーネントのセットに基づいてアイテムキューのscrapy支持分散戦略、よだれ側共有マスター端Redisのデータベース、要求キューを可能にし、指紋のセットを要求のRedis。

2)なぜRedisのデータベースのRedisは、マスタ - スレーブ同期をサポートし、データがメモリにキャッシュされているので、Redisのベースの分散クローラので、効率を読み出す要求およびデータの高頻度は非常に高いです。

2.あなたは、クローラモジュールフレームまたは何を使用しましたか?彼らは違いや長所と短所について話しますか?

urllibは、urllib2の:Pythonは付属しています

サードパーティ:リクエスト

フレームワーク:Scrapy

urllibはとurllib2のモジュールは、リクエストURLに関連する操作を行うが、彼らはさまざまな機能を提供します。

urllib2.:urllib2.urlopen Requestオブジェクトは、URLのみのurllib.urlopenを受け取り、URLを受け入れることができ、または、(Requestオブジェクトを受信した場合、したがって、URLのヘッダーを設定することができます)

その理由はでurlencode、urllib2のない、そのため常にurllibは、urllib2のは、多くの場合、一緒に使用しているurllibは

scrapyがフレームをカプセル化され、彼は、単一の固定サイトの開発のためのクロール、利点があり、マルチスレッド、ツイストウェイプロセスに基づいて、ダウンローダ、パーサ、ロギングおよび例外処理を含むが、マルチサイト100をクロールするためのウェブサイト、同時および分散処理、融通の利かない、不便な調整や展示があります。

要求は、それがのみ使用され、HTTPライブラリであるHTTPリクエストの要求、彼は強力なデータベースで、ダウンロード、彼らの完全な治療を解析し、より高い柔軟性、高い並行性と分散型の展開も非常に柔軟であるとするために機能することができより良い実装。

Scrapy長所と短所:

アドバンテージ:scrapyは非同期です

代わりに、より多くの定期的な読みやすさを取るのXpath

強力な統計とログシステム

別のURLにクロール中

サポートシェル、便利で独立した試運転

ミドルウェアを書く、いくつかの統一されたフィルタを書くのは簡単

パイプラインを介してデータベースに格納されています

短所:のpythonに基づいてクローラフレーム、貧しい人々スケーラビリティ

ツイストフレームベース、例外の動作は、反応器を殺すことなく、非同期フレームエラーが他のタスク、検出が困難データエラーを停止しません。

3.お気に入りのMySQLのエンジンとは何?各エンジンの違いは何ですか?

次のように2基の主機関のMyISAMとInnoDBは、主な相違点は以下のとおりです。

、InnoDBはMyISAMテーブルがサポートされていない、トランザクションをサポートし、これは非常に重要です。トランザクションが高いです

限りのMyISAMながらも、エラー低減をロールバックすることができる付加および欠失のシリーズとして処理段階、

そうではありません。

二、クエリベースのアプリケーションのためのMyISAMと同様に、挿入、頻繁に変更のためのInnoDB、および関与

高セキュリティアプリケーション。

三、InnoDBのサポート外部キー、MyISAMテーブルはサポートしていません。

四、MyISAMテーブルは、InnoDBが指定する必要があり、デフォルトのエンジンです。

ファイブは、InnoDBのFULLTEXTインデックスのタイプがサポートされていません。

必要とシックス、行の数は、表、InnoDBはときからのInnoDBストレージテーブルとしてSELECT COUNT(*)ではありません

全体のテーブルの上にスキャンがどのように行数を計算しますが、MyISAMテーブルは単純に保存されている行の良い番号を読み取ります

ことができます。COUNT(*)ステートメントは、条件がテーブル全体をスキャンする必要があるのMyISAMが含まれている場合、以下のことを注意してください。

セブン、自己成長分野のために、InnoDBはなく、MyISAMテーブルで、フィールドのインデックスのみが含まれている必要があります

テーブルは、関節指数と他の分野で確立することができます。

八、時に明確なテーブル全体、InnoDBが行で行を削除することで、効率が非常に遅いです。MyISAMテーブルは重いだろう

テーブルを構築します。

テーブル全体が更新テーブルとしてロックされているいくつかのケースではナイン、InnoDBの行ロックサポート(設定= 1の場合

「%風下%」のようなユーザー

4.下で実行されている機構scrapyの枠組みを説明して?

リクエストキューにエンジンによって送信要求にstart_urlsからスケジューラに第一及びURLを取得し、取得が完了すると、スケジューラは、要求リソースに対応する応答を取得するためのダウンロード要求に要求をキューに応答して抽出処理を行うためにそれらの調製の分析方法:1抽出されたデータは、文書処理パイプラインに必要とされる場合、抽出されたURLは、URL(送信要求、エンジンによって要求の前に進み2場合。要求キューが要求されなくなるまで、スケジューラキュー...)に、プログラムが終了します。

5.どのような、リレーショナルクエリは何ですか?

クエリ複数のテーブル一緒に、主に関連して、左右の接続、完全に接続する(外部結合)接続

6.マルチプロセスより良いと爬虫類を書きますか?または良いマルチスレッド?なぜ?

IO集中コード(文書処理、ウェブクローラなど)、有効(IO操作の効率を向上させることができるマルチスレッドのIOであろう時の不必要な浪費をもたらす、単一のスレッドを待つ必要があり、そして、自動糸Aに待機している複数のスレッドを開くことができスレッドBに切り替え、あなたは)プログラムの実行の効率を向上させることができ、CPUリソースを無駄にすることはできません。実際のデータ収集プロセスでは、我々は問題と応答速度を考慮するだけでなく、マルチプロセスまたはマルチスレッド化を設定するには、マシンのハードウェア自体を考慮する必要があります

7.データベースの最適化?

1.最適化インデックス、SQL文、スロークエリ分析。

2.データベースを設計するデータベース設計パラダイムによれば、厳密なタイムテーブルを設計します。

3.キャッシュは、頻繁にアクセスされるデータとすることができ、キャッシュ内のデータの頻繁な変更を必要としません

ディスクIOを保存します。

4.最適化ハードウェア、技術のディスク・キュー(RAID0、RAID1、RDID5)等を使用して、SSDを使用して、

内部には、MySQLのパーティショニングテーブル、異なるファイル階層データを使用して構築され、磁気を向上させることが可能です

ディスクを読み込むの効率性;

表6.垂直;いくつかは、常に、テーブル内のデータを読み、ディスクI / Oを保存しないでください。

7.リーダーは、マスターから分離され、マスタコピー読み出し動作を使用して、データベースから分離された書き込み操作。

8.サブライブラリーサブサブテーブル機(データの特に大量)、主な原理は、データのルーティングです。

9.適切なエンジン最適化パラメータテーブルを選択します。

10.レベル・キャッシュ・アーキテクチャを実行し、静的および分散。

11.フルテキストインデックスは使用されません。

12.高速ストレージ、例えばのNoSQLストア頻繁にアクセスされるデータを使用します

8.一般的な抗爬虫類と我々のアプローチ?

ヘッダを通じて1)アンチ爬虫類

ユーザーのヘッダ抗クローラからの要求は、最も一般的な抗爬虫類戦略です。ヘッダには、多くのユーザエージェントのサイトで検出されただけでなく、リファラーが検出されるサイトの一部(サイトのリソースの一部は、抗ホットリンクリファラーを検出することである)です。またはターゲットドメインのリファラー値を変更し、あなたは抗爬虫類このタイプのメカニズムが発生した場合は、ヘッダ爬虫類のにブラウザのUser-Agentをコピーし、ヘッダにある爬虫類に直接添加することができます。抗爬虫類を検出するためのヘッダ、ヘッダを変更したり、追加の良いバイパスクローラことができます。

2)ユーザーの行動抗爬虫類に基づきます

短い時間内に同じページを複数回アクセスするには、このような同じIPなど、ユーザーの行動を検出することで、サイトの一部、または短時間に同じアカウントと同じ操作を数回あります。

ほとんどのサイトは、前者の場合あり、この場合には、IPプロキシの使用を解消することができます。あなたはすべての後にテストし、それらを保存し、公共のインターネットプロキシIPをクロール、特別な爬虫類を書くことができます。このようなプロキシのIPクローラが頻繁に使用されている、それは自分で用意するのが最善です。あなたは各IP IP要求は数回交換することができ、多数のエージェントを持っていたら、要求またはurllib2の中で行うことは非常に簡単ですので、あなたは簡単に最初の抗クローラをバイパスすることができます。

第二のケースのために、一つはランダムな間隔で、次いで、各要求後に数秒を要求することができます。いくつかの論理的な脆弱性のサイト、あなたは、いくつかの回を要求ログアウト、再度ログインし、短時間で同じアカウントをバイパスするための要求を制限するために、引き続き同じ要求を複数回行うことができないことができます。

3)動的なページカウンタ爬虫類

上記の状況のほとんどは、同様に、サイトの一部として、私たちが得たか、JavaScriptによって生成されたAJAX要求データを通じてクロールする必要が、静的なページに記載されています。まず、ネットワークはフィドラーによって、要求を分析します。あなたは、AJAXリクエストを見つけることができれば、特定のパラメータと特異的応答の意味を分析することができ、我々は、所望の応答を解析して得られたJSONデータのための直接またはurllib2のアナログAJAXリクエスト要求を、上記の方法を使用することができます。

直接コースのデータを取得するために、AJAXリクエストをシミュレートすることができます優れているが、いくつかのサイトAJAX要求はすべて暗号化されたすべてのパラメータを設定します。私たちは、単に彼らが必要とする要求されたデータを作成することはできません。セレン+ phantomJSの使用に関するこのような場合には、ブラウザのカーネルを呼び出し、そして人間の行動とトリガのjsスクリプトのページをシミュレートするphantomJS jsの実行を使用しています。フォームに必要事項を記入し、ページをスクロールするボタンをクリックしてから、特定の要求と応答プロセスが、やはりデータのシミュレーションを閲覧するためのmanページの完全なアカウントに関係なく、すべてをシミュレートすることができます。

それはブラウザである自体、(ある程度のヘッダを付加することにより、上記ブラウザになりすますことである)データにアクセスするためのブラウザのように偽装されていないため、ほとんどの抗爬虫類をバイパスすることはほとんどでき、この枠組みで、phantomJSでありますブラウザのインターフェースが、ブラウザ何がこの人を処理していないされていません。リー・セレン+ phantomJSできる多くのものが、例えば、タッチタイプの認識(12306)やスライド式のコードを、のようなページのブルートを形成します。

9.分散爬虫類は、主にこの問題を解決しますか?

1)IP

2)帯域幅

3)CPU

4)I

10.爬虫類のプロセスがどのように検証コードに対処するには?

1.scrapyが来ます

2.ペイ・インタフェース

おすすめ

転載: www.cnblogs.com/xiaoxiaoxl/p/11110137.html