Pythonのインタビュー2

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

  ①発電機の発電機

  ②イテレータが反復処理:ファイル内の行のために

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

 

1)アンイテレータは、次のクラスであればメソッドやITERメソッドが返す自身を持って、任意のオブジェクト、より抽象的な概念です。ループの反復処理に使用される等コンテナオブジェクト列、リスト、辞書、タプル、このタイプのためには便利です。文のコールITER()関数の背景には、ITER()コンテナオブジェクトの組み込み関数Pythonのです。ITER()は個別のコンテナ内のコンテナ要素内でアクセスイテレータオブジェクトの定義された次の()メソッドを返し、構築された次の()関数は、Pythonです。後続の要素が存在しない場合には、次の()は、呼び出すとStopIteration例外をスロー

2)発電機(ジェネレータ)はイテレータを作成するためのシンプルかつ強力なツールです。彼らは、通常の関数のように書かれてますが、必要なときにデータを返すためにyield文を使用しています。次回のたびに()が呼び出されるとは、発電機は(それは文が実行される最後の時間とすべてのデータ値を記憶位置)の位置にそれを返します。

違いは:Builderは、イテレータを行うことができるすべてのことを行うだけでなく、自動的に__iter作成__()とnext()メソッドは、発電機は特に簡単ですが、また、高効率の発電機は、代わりにリストジェネレータ式を使用することができます理解は、同時にメモリに保存することができます。ジェネレータが終了自動メソッドの作成と保存プログラム状態に加えて、彼らは自動的に呼び出すとStopIterationを上げます

3、デコレータの役割と機能:

 

ログの導入

関数の実行時間の統計情報

機能の準備処理を行う前に

関数が実行された後に機能をクリーニング

チェック権限と他のシーン

キャッシュ

 

4、次のGILについての簡単な話:

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

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

 

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

1.設定GIL
スレッドに切り替えを実行するために
3ランを:
    。Aは、バイトコード命令の数を指定し、か

    B。制御スレッドにイニシアチブ(time.sleep(0)と呼ぶことができる)
睡眠4.スレッド
5. GILロック解除
上記のすべてのステップは、6再び繰り返されます。

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

 

 

5、検索とgrep

 

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

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

 

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

linuxの監督の下でのバックグラウンド・プロセス管理ツール

supervisord再起動のLinuxサービスの実装前に、すべてのファイルの変更

 

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

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

 

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

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

9、収率のPythonの使用

単に得、それは最後に、関数本体内の位置を記憶して機能を返すようになるように発電機です。第二の(又はn回)関数呼び出しのジャンプ時間を生成する)の関数呼び出しにジャンプします。

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

ガベージコレクタ:C ++、Javaや他の言語とは異なりPythonのような、彼らは、変数の型変数の割り当てを宣言するために直接進めることができません。Python言語の面では、実行時間とメモリのオブジェクトタイプが決定されます。私たちは、Pythonは動的に(ここでは、ダイナミック型は単純に自動的に変数の型と変数の割り当てを決定し、実行時のメモリアドレスの変数割り当てに起因することができます持っている)理由の言語を入力されて呼び出すのはこのためです。

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

第三に、Pythonのメモリ・プールのメモリー機構ピラミッド行、-1、-2、主オペレーティングシステムで動作層、

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

      オブジェクトが少ない256K以上である場合、第1の層と第二層は、記憶層で実装Pythonのインタフェース機能PyMem_Malloc機能を直接割り当てられたメモリ・プールです。

      レイヤ3は、我々はPythonオブジェクトの動作を指示、である、最上層です。

ときCのmallocと無料通話が頻繁であれば、パフォーマンスの問題に加えて、頻繁なメモリ割り当てを生成し、主要なPythonのここでやって作品を制作しますメモリの断片化の小片をリリースします..:

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

ここでは、まだメモリを割り当てるためにmalloc関数を呼び出しますが、それぞれが256Kブロックサイズのチャンクのためのメモリを割り当てます。

最終的にはメモリプールにリサイクルすること、および無料のCを緩和。次の使用のために。シンプルなPythonはオブジェクトのために、このよう数値、文字列、タプル(タプルを変更することが許可されていないとして呼び出すことはありませんへのメモリプールメモリを経由して登録Bのメモリ空間は同じままであるが、しかし、変化の値が再考する時期)、コピーモード(ディープコピー?)、別の変数Bが変数Aに割り当てられているときに言うことであるで使用され配布スペース、およびBは、もはや同じアドレスではありません

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

リンクされたリストデータが非連続空間に格納することができる一方、リンクリストアレイは、連続空間の配列に格納されたデータ記憶装置、データの概念的な実施形態です。

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

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

あなたは最高です!

ウェブフレーム部

 

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

何ナノログインが存在しない前に、ユーザーのログインセッションデータは、アプリケーションサーバBに共有されていない場合は、サーバアプリケーション。

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

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

ポスト要求

検証コード

形で添加{%csrf_token%}タグ

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

MVCデザインに追従し、固有名詞があるDjangoフレームワークの場合:MVT

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

同じMVC、HttpRequestの受信、サービス処理におけるVビューの綴り、およびC関数、戻りのHttpResponse

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

行うにはどのようにソートデータクエリの結果を4.django、降順でそれを行う方法、クエリを行うのはどの分野よりも大きくなっています

ソート)(ORDER_BYを使用して

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

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

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

:ミドルウェアは、比較的軽量で、処理要求と応答処理の間に介在され、入力と出力の変化は、グローバルジャンゴ。

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

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

DjangoのORMは、他のモジュールの枠内で結合する高度で構築しました。

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

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

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

Djangoテンプレート設計思想が完全コード、スタイルの分離であり、Djangoは基本的にテンプレートに符号化された排除、データを処理することができます。

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

HttpResponseRedirectを使用してください

リダイレクトと逆

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

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

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

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

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

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

10.Django自体はなぜ展開するには、そのrunserverを提供しますか?

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

WSGIサーバは、実行中の主にテストと開発に使用され、道は開かれたrunserver単一のプロセスです。

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

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

あなたは最高です!

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

 

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

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

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

オープン()とsend()メソッドのXMLHttpRequestオブジェクトを使用して、第二段階は、サーバにリソース要求を送信します。

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

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

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

200 OK

恒久的移動301

302 FOUND

304は変更されません

307一時的なリダイレクト

400不正な要求

401無許可

403禁止します

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

410はゴーン

500内部サーバーエラー

501実装されていません

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

GET要求は、要求されたデータが分割されたデータ、パラメータ&接続を複数に?URL、URLに付加して送信されます。代わりにunicldeエンコード形式の用途のASCIIをコードするURL、その後、符号化するすべての非ASCII文字の後に言うことです転送。

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

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

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

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

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

3、セキュリティ

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

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

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

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

図3に示すように、セッションは、一定期間内にサーバに保存されます。増加にアクセスする際、よりアカウント緩和サーバのパフォーマンスにサーバのパフォーマンスの撮影を占有されるだろう、あなたはクッキーを使用する必要があります。

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

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

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

ソケットを作成1.socket

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

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

4.accept WAITクライアント

5.recv /送信データの送受信

あなたは最高です!

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

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

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

Redisのサポートマスタ - スレーブ同期、データがメモリにキャッシュされるので、2)なぜ効率を読み取ることは非常に高く、Redisのベースの分散クローラ、要求及びデータの高周波ように、データベースのRedis。

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

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

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

フレームワーク:Scrapy

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

urllib2.:urllib2.urlopen Requestオブジェクトは、URLを受け入れることができ、または、(Requestオブジェクトを受信した場合、したがって、URLのセットヘッダであってもよい)、AのみURL urllib.urlopenを受信します

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

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

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

Scrapy長所と短所:

利点:scrapyが非同期であります

XPathは、代わりに、より定期的な読みやすさを取ります

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

別のURLにクロール中

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

いくつかの統一されたフィルタを書きやすい書き込みミドルウェア、

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

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

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

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

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

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

長いのMyISAMながらでき、またロールバックエラーの低減、付加および欠失の一連のように処理ステージ、

そうではありません。

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

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

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

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

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

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

どのように多くの行を計算するために、全テーブルの上にスキャンしますが、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文、スロークエリ分析。

データベースを設計するデータベース設計パラダイムに記載の設計厳密な時間テーブルと

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

保存ディスクIO;

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

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

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

表6.垂直;一部は常に、ディスクI / Oの保存、テーブル内のデータを読んでいません。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1)IP

2)帯域幅

3)CPU

4)I

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

1.scrapyが来ます

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

公開された91元の記事 ウォン称賛47 ビュー90000 +

おすすめ

転載: blog.csdn.net/qq_30007885/article/details/103346888