PythonWebクローラーについて話す

関連する背景

WebスパイダーまたはWebロボットとも呼ばれるWebスパイダーは、Webサイトデータを自動的に収集するために使用されるプログラムです。インターネットを蜘蛛の巣と比較すると、蜘蛛は蜘蛛の巣を這う蜘蛛です。Webクローラーは、検索エンジンのネットワーク情報を収集できるだけでなく、車のチケット価格、採用情報、レンタル情報、Weiboコメントなど、特定のWebサイトで特定の情報を収集するための方向情報コレクターとしても使用できます。

2つのアプリケーションシナリオ

1.png

図1アプリケーションシナリオ

クローラーテクノロジーは、科学研究、Webセキュリティ、製品開発、世論監視の分野で多くのことを実行できます。たとえば、データマイニング、機械学習、画像処理などの科学研究分野では、データがない場合はクローラーを介してインターネットからクロールできます。Webセキュリティの観点からは、クローラーを使用してバッチ検証を行うことができます。 Webサイトの特定の脆弱性の存在を悪用します。製品開発の観点から、さまざまなモールアイテムの価格を収集して、ユーザーに市場で最も低い価格を提供できます。世論の監視の観点から、SinaWeiboデータは次のようになります。ユーザーが海軍であるかどうかを識別するためにキャプチャおよび分析されます。

この記事の3つの目的

この記事では、方向性情報の収集に必要な基本的な知識と関連技術、およびPythonでこれに関連するライブラリを簡単に紹介します。同時に、データキャプチャに関連するライブラリのパッケージ実装を提供します。目的は、不要な構成を減らして使いやすくすることです。現在、urllib2、requests、mechanizeのパッケージのみが含まれています。アドレス:https//github.com/xinhaojing/Crawler

4つの操作プロセス

方向情報のクロールの場合、クローラーには主に、データキャプチャ、データ分析、データストレージなどの操作プロセスが含まれます。その中で:

(1)データキャプチャ:構築されたHTTP要求を送信して、必要なデータを含むHTTP応答を取得します。

(2)データ分析:HTTP応答の元のデータを分析およびクリーンアップして、必要なデータを抽出します。

(3)データストレージ:データをデータベース(またはテキストファイル)にさらに保存して、ナレッジベースを構築します。

2.png

図2.1基本的な操作プロセス

3.png

図2.2詳細な操作プロセス

5つの関連技術

クローラーの関連テクノロジーは次のとおりです。

(1)データキャプチャ:HTTP要求および応答の各フィールドの意味を理解します。主にネットワークトラフィックの分析に使用される、関連するネットワーク分析ツールを理解します。たとえば、burpsuitなどです。一般に、ブラウザの開発者モードを使用するだけです。

(2)データ分析:HTML構造、JSONおよびXMLデータ形式、CSSセレクター、Xpathパス式、正規表現などを理解します。目的は、応答から必要なデータを抽出することです。

(3)データストレージ:データストレージを容易にするためのMySQL、SQLite、Redisおよびその他のデータベース。

4.png

図3関連テクノロジー

上記はクローラーを学習するための基本的な要件です。実際のアプリケーションでは、マルチスレッドを使用して効率を向上させる方法、タスクスケジューリングを行う方法、アンチクローラーを処理する方法、分散クローラーを実装する方法なども考慮する必要があります。この記事の紹介は限定的であり、参照のみを目的としています。

6つのPython関連ライブラリ

クローラーの実装に関しては、scrapyフレームワークに加えて、pythonには多くの関連ライブラリがあります。その中で、データキャプチャには、urllib2(urllib3)、requests、mechanize、selenium、およびsplinterが含まれ、データパーサーには、lxml、beautifulsoup4、re、pyqueryが含まれます。

データキャプチャの場合、関連するプロセスは主にブラウザをシミュレートして、構築されたhttpリクエストをサーバーに送信することです。一般的なタイプはget / postです。その中で、urllib2(urllib3)、requests、mechanizeを使用して、URLに対応する元の応答コンテンツを取得します。一方、seleniumとsplinterは、ブラウザードライバーをロードしてブラウザーをレンダリングした後、より高度なシミュレーションで応答コンテンツを取得します。 。

選択する特定のライブラリは、効率や相手のクローラー防止方法など、実際のニーズに応じて決定する必要があります。一般に、urllib2(urllib3)、requests、mechanizeなどを使用して、セレンやスプリンターを使用せずに問題を可能な限り解決できます。後者はブラウザーをロードする必要があり、効率が低いためです。

データ分析の場合、主に応答ページから必要なデータを抽出します。一般的な方法は、xpathパス式、CSSセレクター、正規表現などです。その中で、xpathパス式とCSSセレクターは主に構造化データの抽出に使用され、正規表現は主に非構造化データの抽出に使用されます。対応するライブラリは、lxml、beautifulsoup4、re、pyqueryです。


多くの人がPythonを学び、どこから始めればよいのかわかりません。
多くの人がPythonを学び、基本的な文法を習得した後、どこから始めればよいかわかりません。
事例研究を行った多くの人々は、より高度な知識を学ぶ方法を知りません。
これらの3つのタイプの人々のために、私はあなたに優れた学習プラットフォームを提供し、ビデオチュートリアル、電子書籍、およびコースのソースコードを無料で受け取ることができます!
QQグループ:721195303


表1関連するライブラリドキュメント

  クラスライブラリ ドキュメンテーション
  データ収集 urllib2 https://docs.python.org/2/library/urllib2.html
リクエスト http://cn.python-requests.org/zh_CN/latest
機械化する https://mechanize.readthedocs.io/en/latest/
破片 http://splinter.readthedocs.io/en/latest/
セレン https://selenium-python.readthedocs.io/
  データ解析 lxml http://lxml.de/
  beautifulsoup4 https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html http://cuiqingcai.com/1319.html
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
pyquery https://pythonhosted.org/pyquery/

セブン。関連紹介

1つのデータキャプチャ

(1)urllib2

urllib2は、WebページやローカルファイルにアクセスするためのPythonに付属するライブラリであり、通常はurllibで使用する必要があります。urllibは送信されたデータをエンコードするためのurlencodeメソッドを提供し、urllib2には対応するメソッドがないためです。

以下は、urllib2の単純なカプセル化の説明です。主に、面倒な構成タスクを回避するために、1つのクラス関数の関連機能に焦点を当てています。

5.png

6.png

7.png

8.png

図4urllib2パッケージの説明

(2)リクエスト和機械化

requestsは、urllibに基づくPythonのサードパーティライブラリですが、シンプルなインターフェイスを備えたurllibよりも便利です。その機能には、httpリクエストについて:カスタムリクエストヘッダーのサポート、プロキシ設定のサポート、リダイレクトのサポート、セッション保持のサポート[request.Session()]、タイムアウト設定のサポート、投稿データの自動urlencode、httpレスポンスについて:詳細データは、手動設定なしで応答で取得されます。これには、ステータスコード、自動的にデコードされた応答コンテンツ、応答ヘッダーのさまざまなフィールドが含まれます。また、JSONデコーダーも組み込まれています。

Mechanizeは、urllib2の一部の機能を置き換えるものであり、ブラウザーの動作をより適切にシミュレートでき、Webアクセス制御の包括的なジョブを実行します。その機能には、Cookie設定、プロキシ設定、リダイレクト設定、簡単なフォーム入力、ブラウザの履歴と再読み込み、リファラーヘッダーの追加(オプション)、robots.txtへの自動準拠、HTTP-EQUIVの自動処理、待機の更新のサポートが含まれます。

リクエストと機械化を単純にカプセル化した後のインターフェースはurllib2と同じであり、関連する機能も1つのクラス関数に集中しています。ここでは説明を繰り返さず、与えられたコードを参照できます。

(4)破片とセレン

Selenium(python)とsplinterは、ブラウザーの動作を非常によくシミュレートでき、どちらもブラウザードライバーをロードすることで機能します。情報収集の面では、ネットワークリクエストの分析の手間が軽減されます。通常、データページに対応するURLを知っていれば十分です。ブラウザをロードする必要があるため、効率は比較的低くなります。

デフォルトでは、Firefoxブラウザが優先されます。簡単に検索できるように、chromeおよびpantomjs(ヘッドレスブラウザー)ドライバーのダウンロードアドレスは次のとおりです。

Chromeとpantomjsのドライバーアドレス:

クローム:http:  //chromedriver.storage.googleapis.com/index.html?path = 2.9 /

pantomjs:http://phantomjs.org/download.html 

2データ分析

データ分析に使用できるライブラリは、lxml、beautifulsoup4、re、pyqueryです。その中で、beautifulsoup4がより一般的に使用されます。これらのライブラリの使用に加えて、xpathパス式、CSSセレクター、およびWebページからのデータ抽出を容易にする正規表現の構文について学ぶことができます。その中で、クロムブラウザはXpathを生成する機能を備えています。

9.png

図5要素のxpathのクロムビュー

ネットワーク分析に基づいて必要なデータに対応するページを取得できれば、ページからデータを抽出する作業は比較的明確です。具体的な使用方法はドキュメントを参照できますが、ここでは詳しく説明しません。

8つの反爬虫類

1.基本的なアンチクローラー方式は、主にUser-Agent、refererなどのリクエストヘッダーのフィールドを検出することです。この場合、リクエストに対応するフィールドを含めるだけです。構築されたhttpリクエストのフィールドは、ブラウザで送信されたものとまったく同じであることが最適ですが、必須ではありません。

2.ユーザーの行動に基づくクローラー防止方法は、主にバックグラウンドで訪問したIP(またはユーザーエージェント)をカウントし、特定の設定されたしきい値を超えたときにそれをブロックすることです。このような状況を考慮して、プロキシサーバーを使用することで解決できます。数回のリクエストごとに、使用するエージェントのIPアドレスを切り替えます(またはUser-Agentリストを使用して解決し、リストからランダムに1つ選択してそれぞれを使用します)時間)。このようなクローラー防止方法は、誤ってユーザーに害を及ぼす可能性があります。

3.取得するデータがajaxリクエストを介して取得され、ajaxリクエストがネットワーク分析によって検出され、リクエストに必要な特定のパラメーターも分析できる場合、対応するhttpリクエストを直接シミュレートできます。対応するデータを取得できます。この場合、通常のリクエストとの違いはありません。

4. JavaScriptベースのクローラー防止メソッドは、主にデータページに応答する前にJavaScriptコードを含むページを返すことです。これは、訪問者がJavaScript実行環境を持っているかどうかを確認して、ブラウザーが使用されているかどうかを判断するために使用されます。

通常、このJSコードが実行された後、パラメータキーを使用したリクエストが送信されます。バックグラウンドは、キーの値を判断することにより、実際のページに応答するか、偽のページまたは間違ったページに応答するかを決定します。キーパラメータは動的に生成され、毎回異なるため、その生成方法を分析することは困難であり、対応するhttpリクエストを作成することは不可能です。

たとえば、Webサイトhttp://www.kuaidaili.com/はこのように使用されます。詳細については、https://www.v2ex.com/t/269337を参照してください

初めてWebサイトにアクセスすると、応答JSコンテンツはyundunパラメーターを使用してリクエストを送信し、yundunパラメーターは毎回異なります。

10.png

11.png

図6動的パラメータyundun

現在のテストでは、JavaScriptコードが実行された後、送信されたリクエストはyundunパラメータを伝達しなくなりますが、Cookieは動的に生成され、Cookieは後続のリクエストで伝送されます。これはyundunパラメータと同様です。

12.png

13.png

14.png

図7動的Cookie

このようなクローラー防止メソッドの場合、クローラーはJavaScriptを解析して実行できる必要があります。特定のメソッドは、セレンまたは破片を使用してブラウザーをロードすることで実装できます。

自分で作成したPython学習グループ:721195303を引き続きお勧めします。全員がPythonを学習しています。Pythonを学習したい、または学習している場合は、ぜひ参加してください。誰もがソフトウェア開発パーティーであり、時から乾物を共有しています。最新のPythonの高度な資料のコピーと、2021年に私が編集したゼロベースの教育を含む(Pythonソフトウェア開発関連のみ)。高度でPythonに興味のある友人を歓迎します。
 

おすすめ

転載: blog.csdn.net/aaahtml/article/details/112900552