1. 基本的な紹介
1.1 爬虫類とは
クローラー (スパイダー、Web クローラーとも) は、Web サイト/ネットワークへのリクエストを開始し、リソースを取得した後に分析して有用なデータを抽出するプログラムです。
技術的には、ブラウザがサイトをリクエストする動作をプログラムでシミュレートし、サイトから返されたHTMLコード/JSONデータ/バイナリデータ(画像、動画)をローカルにクロールして抽出します。必要なデータを保存し、使用できるようにします。
1.2 爬虫類の基本的なプロセス
ユーザーがネットワーク データを取得する方法:
-
方法 1: ブラウザーがリクエストを送信 —> Web ページのコードをダウンロード —> ページに解析
-
方法 2: ブラウザーをシミュレートしてリクエストを送信 (Web ページ コードを取得) -> 有用なデータを抽出 -> データベースまたはファイルに保存
クローラーが行うべきことは方法 2 だけです。
Python クローラーを使い始めるには 10 分で十分です。これは私が今まで見た中で最も簡単な基本的な教えかもしれません
1. リクエストを開始する
http ライブラリを使用して、ターゲット サイトへのリクエストを開始します。つまり、リクエストを送信します。
リクエストにはリクエストヘッダー、リクエスト本文などが含まれます。
リクエストモジュールの欠陥: JS および CSS コードを実行できません
2. 応答内容を取得する
サーバーが正常に応答できれば、Response が返されます。
応答には html、json、写真、ビデオなどが含まれます。
3. コンテンツを解析する
HTMLデータの解析:正規表現(REモジュール)、Xpath(主に使用)、美しいスープ、CSS
jsonデータの解析: jsonモジュール
バイナリデータを解析: wb モードでファイルに書き込みます
4. データの保存
データベース (MySQL、Mongdb、Redis) またはファイルの形式。
1.3 http プロトコルのリクエストとレスポンス
httpプロトコル
リクエスト: ユーザーはブラウザ (ソケット クライアント) を通じて自分の情報をサーバー (ソケット サーバー) に送信します。
応答: サーバーはリクエストを受信し、ユーザーが送信したリクエスト情報を分析し、データを返します (返されたデータには、画像、js、css などの他のリンクが含まれる場合があります)。
ps: ブラウザーはレスポンスを受信すると、そのコンテンツを解析してユーザーに表示します。クローラー プログラムは、ブラウザーがリクエストを送信してレスポンスを受信することをシミュレートした後、有用なデータを抽出します。
Python に興味がある、または学習中の友人は、Python 学習ボタン: 784758214 に参加できます。0 ベースの Python スクリプトから Web 開発、クローラー、ジャンゴ、データマイニング データ分析など、0 ベースから実際のプロジェクト情報まですべてが整理されています。すべての Python 仲間に! 学習方法や注意が必要な細かい点を毎晩共有し、ルート計画を学び、プログラミングを使って副収入を稼ぎましょう。クリックして Python 学習サークルに参加してください
1.3.1 リクエスト
(1) リクエスト方法
一般的なリクエストメソッド: GET / POST
(2) リクエストされたURL
url グローバル統一リソース ロケーター。インターネット上の一意のリソースを定義するために使用されます。例: 画像、ファイル、ビデオは、url によって一意に決定できます。
(3) リクエストヘッダ
ユーザー エージェント: リクエスト ヘッダーにユーザー エージェント クライアント構成がない場合、サーバーはユーザーを不正なユーザー ホストとして扱う可能性があります。
Cookie: Cookie はログイン情報を保存するために使用されます。
注: 通常、クローラーはリクエスト ヘッダーを追加します。
リクエストヘッダーで注意が必要なパラメータ:
リファラー: アクセス ソースはどこから来たのか (一部の大規模 Web サイトでは、リファラーをリーチ対策として使用します。すべてのクローラーもシミュレーションに注意を払う必要があります)
User-Agent: 訪問したブラウザ (追加されるか、クローラとみなされます)
cookie: リクエストヘッダーの保持に注意してください
(4) リクエストボディ
リクエストボディが get メソッド内にある場合、リクエストボディにはコンテンツがありません (get リクエストのリクエストボディは URL の後ろのパラメータに配置され、直接参照できます)。それが post メソッド内にある場合、リクエストボディは次のようになります。データのフォーマット
ps: 1. ログインウィンドウ、ファイルアップロードなどの情報はリクエストボディに添付されます 2. ログインし、間違ったユーザー名とパスワードを入力して送信すると、投稿が表示されます 正しくログインすると、ページが表示されます通常はジャンプしてポストをキャプチャできません
1.3.2 応答
(1) レスポンスステータスコード
200: 成功を表す
301: ジャンプを表します
404: ファイルが存在しません
403: 不正アクセス
502: サーバーエラー
(2)レスポンスヘッダ
応答ヘッダーで注意が必要なパラメータ: Set-Cookie: BDSVRTM=0; path=/: 複数存在する場合があり、ブラウザに Cookie を保存するように指示します。
(3) プレビューはWebページのソースコードです
jsonデータ
ウェブページのHTML、画像など
バイナリデータなど
2. 基本モジュール
2.1 リクエスト
request は、urllib からアップグレードされた、Python によって実装されたシンプルで使いやすい HTTP ライブラリです。
オープンソースのアドレス:
https://github.com/pydmy…
中国語 API:
http://docs.python-requests.o…
2.2 正規表現について
正規表現は、組み込みの re モジュールを使用して Python で使用されます。
デメリット:データ処理が不安定で負荷がかかる
2.3 XPath
XPath (XML Path Language) は、XML ドキュメント内の情報を検索するための言語であり、XML ドキュメント内の要素と属性をトラバースするために使用できます。
Pythonでは主にxpathの取得にlxmlライブラリを使用します(lxmlはフレームワーク内では使用せず、フレームワーク内で直接xpathを使用できます)
lxml は HTML/XML パーサーであり、主な機能は HTML/XML データを解析して抽出する方法です。
正規表現と同様に、lxml も C で実装されています。これは高性能 Python HTML/XML パーサーです。前に学んだ XPath 構文を使用して、特定の要素やノード情報をすばやく見つけることができます。
2.4 美しいスープ
lxml と同様に、Beautiful Soup も HTML/XML パーサーであり、その主な機能は HTML/XML データを解析して抽出する方法です。
BeautifulSoupを使用するには、bs4ライブラリをインポートする必要があります
短所: 比較的規則的で、xpath の処理速度が遅い
長所: 使いやすい
2.5 ジェイソン
JSON (JavaScript Object Notation) は、読み書きを容易にする軽量のデータ交換形式です。同時に、機械が分析して生成するのにも便利です。これは、Web サイトの前景と背景の間のデータ対話などのデータ対話シナリオに適しています。
json モジュールは主に Python で json データを処理するために使用されます。Json 解析 Web サイト:
https://www.sojson.com/simple…
2.6 ねじ切り
threading モジュールを使用してスレッドを作成し、threading.Thread から直接継承して、__init__ メソッドと run メソッドを書き換えます。
3. 手法例
3.1 メソッドインスタンスの取得
デモ_get.py
3.2 ポストメソッドインスタンス
デモ_ポスト.py
3.3 プロキシの追加
デモ_プロキシ.py
3.4 ajaxクラスデータインスタンスの取得
デモ_ajax.py
3.5 マルチスレッドインスタンスの使用
デモスレッド.py
4. 爬虫類のフレームワーク
4.1 Srcapy フレームワーク
Scrapy は、Web サイトのデータをクロールし、構造化データを抽出するために純粋な Python で書かれたアプリケーション フレームワークであり、幅広い用途があります。
Scrapy は、Twisted'twɪstɪd 非同期ネットワーク フレームワークを使用してネットワーク通信を処理するため、独自に非同期フレームワークを実装することなく、ダウンロード速度を高速化できます。また、さまざまなミドルウェア インターフェイスが含まれており、さまざまなニーズに柔軟に対応できます。
4.2 Scrapy アーキテクチャ図
4.3 ひどい主成分
Scrapy Engine (エンジン): Spider、ItemPipeline、Downloader、Scheduler 間の通信、信号、データ送信などを担当します。
スケジューラー (スケジューラー): エンジンによって送信されたリクエストを受け入れ、特定の方法でソートし、キューに入り、エンジンが必要とするときにリクエストをエンジンに返す責任があります。
ダウンローダー: Scrapy Engine (エンジン) によって送信されたすべてのリクエストをダウンロードし、取得したレスポンスを Scrapy Engine (エンジン) に返す責任を負い、エンジンはそれを処理のために Spider に渡します。
スパイダー (クローラー): すべての応答の処理、応答からのデータの分析と抽出、アイテム フィールドで必要なデータの取得、追跡する必要がある URL のエンジンへの送信、およびスケジューラー (スケジューラー) への再入力を担当します。 、
アイテムパイプライン(パイプライン):Spiderで取得したアイテムの処理と後処理(詳細な分析、フィルタリング、保存など)を実行します。
ダウンローダー ミドルウェア (ダウンロード ミドルウェア): ダウンロード機能をカスタマイズおよび拡張できるコンポーネントと考えることができます。
Spider Middleware(スパイダーミドルウェア):拡張・動作エンジンと、エンジンとスパイダー間の中間通信(スパイダーに入るレスポンスやスパイダーから出るリクエストなど)をカスタマイズできる機能部品として理解できます。
4.4 Scrapyの操作プロセス
エンジン: こんにちは!スパイダー、どのサイトを扱っていますか?
スパイダー: ボスが私に xxxx.com を担当してほしいとのことです。
エンジン: 処理する必要がある最初の URL を教えてください。
スパイダー: はい、最初の URL は xxxxxxx.com です。
エンジン: こんにちは!スケジューラーさん、キューに入れてほしいという要望があります。
スケジューラ: OK、処理はお待ちください。
エンジン: こんにちは!スケジューラさん、処理されたリクエストを教えてください。
スケジューラ: はい、これは私が処理したリクエストです
エンジン: こんにちは!ダウンローダー、ボスのダウンロード ミドルウェア設定に従ってこのリクエストをダウンロードするのを手伝ってください。
ダウンローダー: OK! ほら、これがダウンロードしたものです。(失敗した場合: 申し訳ありませんが、このリクエストのダウンロードは失敗しました。その後、エンジンはスケジューラにこのリクエストのダウンロードが失敗したことを伝えます。記録してください。後でダウンロードします)
エンジン: こんにちは!スパイダー、これはダウンロードされたものであり、ボスのダウンロード ミドルウェアに従って処理されています。自分で処理できます (注意! ここでの応答はデフォルトで def parse() 関数によって処理されます)
Spider: (データ処理後にフォローアップする必要がある URL の場合)、こんにちは! エンジン、ここには 2 つの結果があります。これはフォローアップする必要がある URL で、これは取得したアイテム データです。
エンジン: こんにちは!パイプ ここにアイテムがあるので、それを処理するのを手伝ってください。スケジューラー!これはフォローアップする必要がある URL です。対処を手伝ってください。次に、ボスが必要とするすべての情報が得られるまで、4 番目のステップからサイクルを開始します。
パイプライン「スケジューラー: わかりました、今すぐ実行してください!」
4.5 4 つのステップで Scrapy クローラーを作成する
1 新しいクローラプロジェクトを作成しますscrapy startproject mySpider 2 ターゲットをクリアします (items.py を書き込みます) mySpider ディレクトリの items.py を開きます3 クローラを作成します (spiders/xxspider.py)scrapy genspider gushi365 "gushi365.com" 4 コンテンツを保存します ( Pipelines.py) デザイン パイプライン クロールされたコンテンツを保存する
五、共通ツール
5.1 フィダー
fidder は、主に携帯電話のパケット キャプチャに使用されるパケット キャプチャ ツールです。
5.2 XPath ヘルパー
xpath ヘルパー プラグインは、無料の Chrome クローラー Web ページ分析ツールです。これは、ユーザーが xpath パスを取得するときに正常に検索できないなどの問題を解決するのに役立ちます。
Google Chrome プラグイン xpath ヘルパーのインストールと使用:
https://jingyan.baidu.com/art…
6. 分散型クローラー
6.1 スクレイピーレディ
Scrapy-redis は、Scrapy 分散クロールをより便利に実装するために、いくつかの Redis ベースのコンポーネント (pip installscrapy-redis) を提供します。
6.2 分散戦略
マスター側 (コア サーバー): Redis データベースを構築します。クロールは担当せず、URL フィンガープリントの重み判定、リクエストの分散、およびデータ ストレージのみを担当します。
以下は私がまとめたPythonクローラーの入門教材を整理してパッケージ化したものです。
Python 学習教材の完全セットのこの完全版は CSDN にアップロードされています。必要な場合は、WeChat で以下の CSDN 公式認定の QR コードをスキャンして無料で入手できます【保证100%免费
】
Python を始めるための学習教材の完全なセットには、ソース コードが付属しています。
Python の学習ルートの完全なセット
ゼロベースの Python 入門ビデオ
Pythonプロジェクトのソースコード
Python入門から高度な電子書籍と実践事例まで
皆さん、Python の完全な学習教材セットの完全版が必要な場合は、WeChat で以下の CSDN 公式認定の QR コードをスキャンしてください [無料アクセス]。