先生の話によると、あくまでも参考程度で、
表はビッグデータの概念、裏はクローラーの概念と使い方について書かれており、
実際の本はビッグデータの入門書となっている。。。
第1章 概要
1. データ
コンピュータに入力し、コンピュータプログラムによって処理できるすべての記号の総称
2. データの分類
- 構造化データ: 事前定義されたデータ型、形式、構造を含むデータ。リレーショナルデータベースやCSVドキュメントなど
- 半構造化データ: 認識されたスキーマを持ち、解析可能なテキスト データ ファイル。JSONやXMLなど
- 非構造化データ: 固定構造を持たないデータ。通常はさまざまな形式のファイルとして保存されます。例:記事、音声、ビデオ
- 半構造化データと非構造化データは、機械学習用の構造化データにのみ変換できます。
3.ビッグデータ4V特性
- 大規模 (ボリューム): データの収集、計算、およびストレージ容量が非常に大きくなります。
- 速度: データの増加速度が速く、処理速度も速く、データの取得速度も速いです。
- 多様性: さまざまな種と供給源。タイプには、構造化データ、半構造化データ、非構造化データなどが含まれます。一般的な
ソースには、ウェブログ、オーディオ、ビデオ、写真などが含まれます。
低い価値密度 (Value): データの価値密度は比較的低く、ちょうど波の中の金を拾うように、大量の情報に含まれる何らかの価値のある情報を取得するには、価値密度の低い一連のデータを分析および処理する必要があります。
4. ビッグデータの計算特性
近似的、増分的、帰納的
考え方: サンプルと完全なサンプル、正確なものと不正確なもの、因果関係と相関関係
5. データ処理の一般的なプロセス
- データ取得:
データ取得後、データの変換やクリーニングなどの前処理を行い、データ用途の要件を満たすデータを出力する必要があります。 - データ管理:
データの分類、エンコード、保存、インデックス作成、およびクエリ - データ分析:
記述的、診断的、予測的、および処方的 - データの視覚化と対話型分析:
データ処理の専門家ではなくビジネス担当者がデータ分析の結果をよりよく理解できるように支援します。
6. ビッグデータはどの業界に適用されますか? 例を挙げてみましょう。
- ソーシャルネットワーク:音声、文字情報、動画、写真などの非構造化データが大量に出現
- Eコマース:ユーザーの本当のショッピング興味をより包括的かつ豊富に取得できます
- モバイルインターネット:位置情報、生活情報、その他のデータなどのユーザー情報を正確かつ迅速に収集
第 II 章 データ収集とガバナンス
1. ビッグデータのソース:
- 現実世界の測定: センシングデバイスまたはデータを介して。
- 人間の記録: 人間がコンピューターに入力することによって形成されたデータ
- コンピュータ生成データ: 現実世界のシミュレーションなどのプログラムを通じてコンピュータによって生成されたデータ
2. データ収集
現実世界のオブジェクトから生データを取得するプロセス、信頼性、適時性を指します
一般的な方法: センサー、ログ、クローラー、クラウドソーシング
3. データ品質の評価基準
- 整合性: データ情報が欠落しているかどうか
- 一貫性: データが統一仕様に従っているかどうか、論理関係が正しく完全であるかどうか
- 精度: データに異常やエラーはありますか
- 適時性: データが生成されてから表示可能になるまでの時間間隔
4. データ品質に影響を与える要因
- 情報要素: データソースの仕様が統一されていない
- 技術的要因: 技術的取り扱いの例外
- プロセス要因: 不適切なプロセス設定
- 管理要因:人材の質と管理メカニズムの問題
5. 連続データの操作
データの離散化、等距離、等周波数、最適化された離散化
6. データ統合
- 従来のデータ統合: フェデレーテッド データベース、データ ウェアハウス、メディエーター
- 境界を越えたデータ統合: フェーズベースのアプローチ、機能ベースのアプローチ、セマンティックベースのアプローチ
7. ビニング方法
- 等深度ビニング方法: 各ビンには同じ数のレコードがあり、各ビン内のレコード数がビンの深さになります。
- 等幅ビニング法: 各ボックスの間隔が等しくなるように、データ値の間隔全体で均等に分割します。この間隔はボックスの幅と呼ばれます。
- ユーザー定義のビニング方法: ユーザーが定義したルールに従ってビニング処理が実行されます。
以下は顧客所得属性の値です。上記の 3 つのスキームに従ってビニングを実行してください。
800 1000 1200 1500 1500 1800 2000 2300 2500 2800 3000 3500 4000 4500 4800 5000
8. スムージング
9. クラスタリング:
データセットはいくつかのクラスターにグループ化され、クラスターの外側の値はノイズデータである孤立点となり、この孤立点は削除または置換されます。類似または隣接するデータが集約されてクラスター セットと、これらのクラスター セット外のデータが形成されます。
10. 回帰:
関連する 2 つの変数間の相関関係を見つけることにより、2 つの変数間の関係を最大限に満たす回帰関数を構築し、この関数を使用してデータを平滑化します。
11. 冗長データの処理
データをフィルタリングする方法は、通常、冗長データを処理するために使用されます。
- 重複フィルタリング、各重複データからレコードを取り出して保持、他の重複データを削除
- 条件付きフィルタリング。1 つ以上の条件に基づいてデータをフィルタリングします。
12. 不整合の監視と修復
依存関係、機能依存関係、条件付き機能依存関係などを含む、データベースの整合性制約。
13. 欠損値の穴埋め方法
- 削除: 対応する属性またはサンプルを直接削除します。
- 統計的充填: 平均値、中央値、最頻値、最大値と最小値など、このディメンションのサンプルのすべての統計値を使用します。
- 均一な充填: 「空」、「0」、「正の無限大」、「負の無限大」などのすべての欠損値をカスタム値として均一に充填します。
- 予測充填: 既存の属性値を使用して、予測モデルを通じて欠損値を予測します。
14. エンティティの認識
エンティティ認識後に取得された各オブジェクト クラスターは、現実世界の同じエンティティを参照します。
解決された問題: 冗長性の問題、重複した名前の問題
2 種類のテクノロジー:
- 冗長性発見:オブジェクト間の類似度を計算し、閾値比較によりオブジェクトが同じエンティティクラスに属するかどうかを判定します。
重複名の検出: クラスタリング テクノロジを使用して、エンティティ属性間の関連度を調べることにより、同じ名前のオブジェクトが同じエンティティ クラスに属しているかどうかを判断します。
15. 自分のデータが他人の手に渡るのは安全ではなく、プライバシーが侵害される可能性があると考える人もいますが、これについてはどう思いますか?
インターネットは私たちの日常生活にあふれており、私たちのデータを完全に自分のものにすることはできず、私たちがネットワーク上で送信するあらゆる情報は、送信プラットフォームによって取得されたり、一部の人々によって不法に傍受される可能性があります。私たちにできることは、犯罪者がそれを利用できるように、フィッシング プラットフォームに自分のデータを入力しないことです。たとえ正式なプラットフォームが私たちのデータを取得できたとしても、それはプライバシーを侵害するものではありません。
情報の「保有者」が顧客の情報のセキュリティを確保できるのは、どのように抑制すればよいと思いますか?
顧客情報をプライバシー侵害に使用しないことを正式に約束させましょう。たとえば、携帯電話ソフトウェアを使用する場合、地理的位置、テキスト メッセージなどが取得されますが、取得した個人情報が違法に共有されるのではなく、ソフトウェアを正常に実行するためにのみ使用されることが保証される必要があります。
第 3 章 ビッグデータ管理
1. データベース管理技術
データ管理技術とは、データの分類、コーディング、保存、インデックス作成、クエリを指し、ビッグデータ処理プロセスにおける重要な技術であり、データの保存(書き込み)からクエリ検索(読み取り)までの中核システムを担っています。
2. データベース
データベースは、データ構造に従ってデータを整理、保存、管理するコンピューター記憶装置上に構築された倉庫です。
3. リレーショナルデータベース
データを階層構造で保存するのではなく、行と列で構成される単純なテーブルにデータを保存することを核としており、特徴
:
1. データの一元管理、
2. データの高い独立性、
3. 良好なデータ共有、
4. データの冗長性が小さい、
5. データの構造化、
6. 統合データ保護機能。
4. リレーショナルデータモデル
- 関係で表現される
- データの整合性の確保: エンティティの整合性、参照整合性、カスタム整合性
- 行はタプルであり、列はリレーションの属性と呼ばれます。
- リレーション内のタプルを一意に識別する属性セット (単一属性のセットでもよい) がある場合、その属性セットはリレーションのキーまたはコードと呼ばれます。
- タプルを一意に識別するために使用される最小の属性セットは、主キー (主キー) と呼ばれます。
5. リレーショナルデータモデルのデータ操作
- クエリの
選択(Select)、射影(Project)、(Union)、差分(Except)、結合(Join)など。 - 更新
挿入 (Insert)、変更 (Update)、削除 (削除)
6. データベーストランザクションの特性
- アトミック性: トランザクションに含まれるすべての操作がデータベースにすべて正しく反映されるか、まったく反映されないかのいずれかです。
- 一貫性: トランザクションの実行により、データベースは 1 つの一貫した状態から別の一貫した状態に到達します。つまり、トランザクションの実行によってデータベースの一貫性が失われることはありません。
- 分離: トランザクションは分離されており、各トランザクションはシステム内で他のトランザクションが同時に実行されているとは感じません。
- 耐久性: トランザクションが正常に完了すると、システムに障害が発生した場合でも、データベースへの変更は永続的に保持されます。
7. 分散ファイルシステム
分散ファイルシステムは、ネットワークを介して接続された複数の比較的安価なサーバー上に構築され、保存されるファイルは特定の戦略に従って複数のフラグメントに分割され、システム内の複数のサーバーに配置されます。
8. HDFSの特徴
- 大容量ファイルの保存と処理に適しています
- クラスタサイズは動的に拡張可能
- データの一貫性を効果的に確保できる
- 大きなデータ スループット、優れたクロスプラットフォーム移植性
第 4 章 Python データ分析の概要
1. データ分析
- 狭義のデータ分析とは、比較分析、グループ分析、クロス分析、回帰分析など、分析目的に応じた分析手法を用いて、収集したデータを加工・分析し、価値ある情報を抽出し、データの役割を十分に発揮させ、特徴的な統計結果を得る作業を指します。
- データマイニングは、クラスタリング、分類、回帰、相関ルールなどの技術を適用することにより、不完全でノイズが多く曖昧でランダムな多数の実用化データから潜在的な価値をマイニングするプロセスです。
2. ソーシャルメディア分析
- ユーザー分析は、主にユーザーの登録情報、プラットフォームへのログイン時刻、通常公開されているコンテンツなどのユーザーデータに基づいて、ユーザーの個人像や行動特性を分析します
。 - アクセス解析とは、ユーザーが普段アクセスしているコンテンツからユーザーの興味や趣味を分析し、潜在的な商品価値を分析することです。
- 相互作用分析は、相互に関係するオブジェクトの動作に基づいて、オブジェクトの将来の特定の動作特性を予測します。
3. Pythonの利点
- シンプルで学びやすい
- 無料、オープンソース
- 高級言語
- 強力なサードパーティのクラス ライブラリ
- スケーラビリティ、組み込み性、クロスプラットフォーム
4. データ分析用の共通ライブラリ
- IPython - 科学計算用の標準ツールセットの一部
- NumPy (数値 Python) - Python 科学計算の基本パッケージ
- SciPy - 科学計算におけるさまざまな標準的な問題領域の解決に特化したモジュールのコレクション
- Pandas - データ分析コア ライブラリ
- Matplotlib - データ チャートを描画するための Python ライブラリ
- scikit-learn - データマイニングとデータ分析のためのツール
- Spyder - インタラクティブな Python 言語開発環境
第 5 章 Python クローラーの概要
1. 爬虫類
Web クローラーは、Web スパイダーまたは Web ロボットとも呼ばれ、Web ページを自動的にダウンロードするコンピューター プログラムまたは自動スクリプトです。
2. Webページの特徴
-
Web ページには、位置を特定するための独自の URL (https://www.baidu.com/ などの統一リソース コマンド文字) があります。
-
Web ページは HTML (ハイパーテキスト マークアップ言語) を使用してページ情報を記述します。
-
Web ページは HTTP/HTTPS (ハイパーテキスト転送プロトコル) プロトコルを使用して HTML データを送信します。
3. 戦略
- 深さ優先戦略: 深さの低さから高さの順序に従って、深くできなくなるまで次のレベルの Web ページのリンクに順番にアクセスします。Web ページの階層グラフにおけるクロール順序は、A → D → E → B → C → F → G になります。
- 幅優先戦略: Web ページのコンテンツ ディレクトリの深さに応じてクロールし、浅いレベルのページを最初にクロールします。同じレイヤー内のすべてのページがクロールされた後、クローラーは次のレイヤーに移動します。クロールの順序は、A→B→C→D→E→F→G になります。
4. 爬虫類の分類
- 一般的な Web クローラー Web
クローラー全体としても知られており、そのクロール オブジェクトはシード URL のバッチから Web 全体に拡張されます。このタイプのクローラーは、検索エンジンで広範囲のトピックを検索するのに適しており、主に検索エンジンまたは大規模な Web サービス プロバイダーによって使用されます。
テーマ Web クローラーとも呼ばれる集中型 Web クローラー。その最大の特徴は、事前に設定されたトピックに関連するページのみを選択的にクロールすることです。
コンテンツ評価に基づくクローリング戦略 リンク
構造評価に基づくクローリング戦略
強化学習に基づくクローリング戦略
コンテキスト グラフに基づくクローリング戦略
- 増分 Web クローラー
増分 Web クローラーは、ダウンロードされた Web ページを増分更新するか、新しく生成および変更された Web ページのみをクロールし、ローカルに保存されたページを最新の状態に保つために、Web ページに再アクセスしてローカル ページを更新する必要があります。
統一された更新方法: すべての Web ページに同じ頻度でアクセスし、Web ページ自体の変更頻度の影響を受けません。
個別更新方式:各Webページの更新頻度に応じて、各ページを再訪問する頻度を決定します。
分類ベースの更新方法: クローラーは、Web ページの変更頻度に応じて、更新の速い Web ページと更新の遅い Web ページのカテゴリに分類され、これら 2 種類の Web ページにアクセスする頻度を設定します。
- ディープ Web クローラー
ディープ ページは、ほとんどのコンテンツの静的リンクからは取得できない Web ページですが、検索フォームの背後に隠されており、ユーザーがキーワードを送信した後にのみ取得できます。
ドメイン知識に基づくフォーム入力: この方法は通常、オントロジー ライブラリを維持し、セマンティック分析を通じてフォームに入力する適切なキーワードを選択します。
Web ページ構造分析に基づくフォーム入力: この方法には通常、ドメイン知識がまったくないか、限られたドメイン知識しかありません。HTML Web ページは DOM ツリーの形式で表現され、フォームは単一属性フォームと複数属性フォームに分割されます。
5. クロールできない
- 個人のプライバシーデータ:氏名、携帯電話番号、年齢、血液型、婚姻状況など。これらのデータをクロールすると個人情報保護法に違反します。
- 他者によるアクセスが明確に禁止されているデータ: たとえば、ユーザーがアカウントのパスワードやその他の権限制御を設定している場合や、コンテンツが暗号化されている場合などです。
著作権に関しても注意が必要で、著作者が署名した著作権で保護されたコンテンツは、クロール後に複製したり、商業目的で使用したりすることはできません。 - ロボット協定の規定
6.ロボット.txt
User-agent: *
Disallow: /
Allow: /public/
- 上記の User-agent は検索クローラーの名前を記述します。ここで * に設定すると、プロトコルがどのクローラーに対しても有効であることを意味します。たとえば、次のように設定できます: ユーザーエージェント: Baiduspider。これは、私たちが設定したルールが Baidu クローラーに対して有効であることを意味します。複数のユーザー エージェント レコードがある場合、複数のクローラーのクロールが制限されますが、少なくとも 1 つを指定する必要があります。
- Disallow は、クロールを許可しないディレクトリを指定します。たとえば、上記の例で / に設定されている場合、すべてのページのクロールが許可されないことを意味します。
- 通常、Allow は Disallow と一緒に使用され、特定の制限を除外するために単独で使用されることはありません。ここでは、これを /public/ に設定します。これは、すべてのページのクロールは許可されませんが、パブリック ディレクトリはクロールできることを意味します。
7. ウェブサイトアンチクローラーの目的と手段 ***
- ユーザーエージェント検証によるアンチクライミング
- アクセス頻度によるアンチクライミング
- 認証コード認証による登山防止
- Webページの構造変更によるクロール対策
- アカウント権限によるアンチクライミング
8. 上には方針があり、下には対策があります (追記: (◑▽◐) これは単なる戦略画像のクロールに過ぎません)
- モック ユーザー エージェントを送信する
- 訪問頻度を調整する
- パス確認コードの確認
- サイト構造の変化への対応
- アカウント権限による制限あり
- プロキシIPによる回避
9. 爬虫類関連図書館
第 6 章 Web フロントエンドの基本
1.ソケットライブラリ
TCP および UDP 接続の確立に使用できるさまざまなプロトコル タイプと機能を提供します。
2. HTTPリクエストのメソッドとプロセス
- HTTP クライアントは、サーバーの指定されたポート (デフォルトではポート 80) への TCP 接続を作成するサーバーへのリクエストを開始します。
- HTTP サーバーは、このポートからのクライアント要求を待機します。
- リクエストを受信すると、サーバーは「HTTP/1.1 200 OK」などのステータスと、リクエストされたファイル、エラー メッセージ、その他の情報などの応答コンテンツをクライアントに返します。
3. 一般的なリクエスト方法
4. リクエスト(リクエスト)とレスポンス(応答)
HTTP プロトコルは要求/応答モデルを使用します。
- クライアントは、リクエスト メッセージをサーバーに送信します。リクエスト メッセージには、リクエスト メソッド、URL、プロトコル バージョン、リクエスト ヘッダー、およびリクエスト データが含まれます。
- サーバーは、プロトコルのバージョン、応答ステータス、サーバー情報、応答ヘッダー、および応答データを含むステータス行で応答します。
5. 具体的な手順
- Webサーバーに接続する
- HTTPリクエストを送信する
- サーバーはリクエストを受け入れ、HTTP レスポンスを返します。
- 接続の解放 TCP接続
- クライアントは HTML コンテンツを解析します
6. HTTPステータスコードの種類***
HTTPステータスコードはWebサーバーの応答状況を示す3桁のコードで、最初の1桁によって5種類のステータスコードに分けられます。
7. HTTP ヘッダーの種類 ***
- 共通ヘッダー: クライアント側の要求ヘッダーとサーバー側の応答ヘッダーの両方に適用されます。これは、HTTP メッセージ本文で送信される最終データとは関係がなく、送信されるメッセージにのみ適用されます。
- リクエスト ヘッダー: より正確な説明情報を提供します。そのオブジェクトは、リクエストされたリソースまたはリクエスト自体です。新しいバージョンの HTTP によって追加されたリクエスト ヘッダーは、以前のバージョンの HTTP では使用できませんが、サーバーとクライアントの両方が関連するヘッダーを処理できる場合は、リクエストで使用できます。
- 応答ヘッダー: 応答メッセージの詳細情報を提供します。たとえば、[場所] フィールドはリソースの場所を説明するために使用され、[サーバー] フィールドはサーバー自体を説明するために使用されます。新バージョンで追加されたレスポンスヘッダもリクエストヘッダと同様、下位バージョンのHTTPでは使用できません。
- エンティティ ヘッダー: メッセージ本文の説明を提供します。たとえば、メッセージ本文の長さ Content-Length と、メッセージ本文の MIME タイプ Content-Type です。新しいバージョンのエンティティ ヘッダーは、以前のバージョンの HTTP で使用できます。
8.クッキー
- クライアント リクエスト サーバー: クライアント リクエスト Web サイト ページ
- サーバーはリクエストに応答します。Cookie は key=value の形式の文字列です。サーバーはクライアントリクエストのステータスを記録し、応答ヘッダーに Set-Cookie フィールドを追加する必要があります。
- クライアントはサーバーに再度要求します。クライアントは、サーバーから応答された Set-Cookie ヘッダー情報を保存します。再度リクエストする場合は、リクエストヘッダーにサーバーレスポンスのCookie情報が含まれます。
Cookie メカニズムはユーザーのステータスを記録でき、サーバーは Cookie に基づいてユーザーのステータスを記録および識別できます。
第 7 章 単純な静的 Web クローリング
1. 静的 Web ページ
動的 Web ページとは対照的に、静的 Web ページとは、バックグラウンド データベースがなく、プログラムも含まれず、対話できない Web ページを指します。
2. 爬虫類の基本的なプロセス***
- リクエストの開始: HTTP ライブラリを通じてターゲット サイトへのリクエストを開始します。つまり、追加のヘッダーやその他の情報を含めることができるリクエストを送信し、サーバーの応答を待ちます。
- レスポンス内容の取得: サーバーが正常に応答できれば、レスポンスを取得します。レスポンスの内容は、取得するページの内容です。種類には、HTML、Json文字列、バイナリデータ(画像や動画など)などが含まれます。
- コンテンツの解析: 取得されたコンテンツは HTML である場合があり、正規表現と Web ページ解析ライブラリを使用して解析できます。これは、分析のために Json オブジェクトに直接変換できる Json の場合もあれば、保存またはさらに処理できるバイナリ データの場合もあります。
- データの保存: 保存にはさまざまな方法があり、テキストとして保存したり、データベースに保存したり、特定の形式で保存したりできます。
3. urllib3 ライブラリ ***
- (1) リクエストの生成
urllib3.request(method,url,fields=None,headers=None,**urlopen_kw)
-
(2) リクエストヘッダ処理
リクエストメソッド内でヘッダパラメータを渡す必要がある場合は、辞書型を定義することで実現できます。ユーザー エージェント情報を含むディクショナリを定義し、ブラウザとして Firefoxと Chrome、オペレーティング システムとして "Windows NT 6.1; Win64; x64" を使用し、ヘッダー パラメーターを含む GET リクエストを Web サイト "https://www.jd.com/index.html" に送信します。ここで、hearers パラメーターは定義されたユーザー エージェント ディクショナリです。 -
(3) タイムアウト設定ネットワークの不安定やサーバーの不安定
などの問題により接続が不安定な場合のパケット損失を防ぐために、リクエストにタイムアウト パラメータの設定を追加できます。タイムアウト パラメータの設定は通常は浮動小数点数です。さまざまなニーズに応じて、タイムアウト パラメータには複数の設定方法が用意されています。リクエストのすべてのタイムアウト パラメータを URL の直後に設定することも、接続を設定してリクエストのタイムアウト パラメータを個別に読み取ることもできます。PoolManager インスタンスでのタイムアウト パラメータの設定は、インスタンスのすべてのリクエストに適用できます。 -
(4) リクエストのリトライ設定
urllib3 ライブラリでは、retries パラメータを設定することでリトライを制御できます。デフォルトでは、リクエストの再試行が 3 回、リダイレクトが 3 回実行されます。カスタムの再試行回数は、retries パラメータに整数を割り当てることで実現され、リクエストの再試行回数とリダイレクト回数は、再試行インスタンスを定義することでカスタマイズできます。 -
(5) 完全な HTTP リクエストを生成する
urllib3 ライブラリを使用して、リンク、リクエスト ヘッダー、タイムアウト、および再試行を含む完全なリクエストを生成します。
4. リクエストライブラリ
リクエスト ライブラリはネイティブ HTTP ライブラリであり、urllib3 ライブラリよりも使いやすいです。
- (1) リクエストの生成
requests.request.method(url,**kwargs)
hd= {
'User-Agent':'Chorme/10'}
r = request.get(url,headers=hd)
-
(2) ステータスコードとエンコードを確認する
リクエストライブラリの推測が間違っていた場合、返されたWebページのコンテンツ解析で文字化けを避けるために、エンコードコードを手動で指定する必要があります。
検出ライブラリを使用して検出します -
(3) リクエストヘッダとレスポンスヘッダの処理
リクエストライブラリにおけるリクエストヘッダの処理は、urllib3 ライブラリと同様で、get リクエストのパラメータのアップロードにも headers パラメータが使用され、パラメータの形式は辞書となります。headers 属性を使用して、サーバーから返された応答ヘッダーを表示します。通常、応答ヘッダーによって返された結果は、アップロードされた要求パラメータに対応します。 -
(4) タイムアウトの設定は、
requests ライブラリに timeout パラメータを設定することで実現し、このパラメータで設定した秒数を超えるとプログラムは待機を停止します。 -
(5)
完全な HTTP リクエストの生成 リンク、リクエスト ヘッダー、レスポンス ヘッダー、タイムアウトおよびステータス コードを含む完全な GET リクエスト、およびエンコードが正しく設定されている必要があります。
デコード機能を使用してrequests.contentの中国語文字化けを解決する
import requests
url = "http://xxx.com"
r = requests.get(url)
print(r.content.decode("gbk"))
5. Chrome 開発者ツール
6. 正規表現
正規表現は、パターンの一致と置換に使用できるツールです。ユーザーは、一連の特殊文字を使用して一致パターンを構築し、その一致パターンを比較対象の文字列またはファイルと比較し、比較オブジェクトに一致パターンが含まれているかどうかに応じて、対応するプログラムを実行できます。
import re
example_obj = "1. A small sentence. - 2. Another tiny sentence. "
re.findall('sentence',example_obj) #从字符串任意位置查找,可以找到所有满足匹配条件的结果,并以列表的形式返回!!!
re.search('sentence',example_obj) #可以扫描整个字符串并返回第一个成功的匹配!!!
re.sub('sentence','SENTENCE',example_obj) ##替换
re.match('.*sentence',example_obj) ##必须从字符串开头匹配!!!
一般的に使用される汎用記号
1. 英語のピリオド「.」: 改行文字「\n」を除く任意の文字を表すことができます;
2. 文字クラス「[]」: 角括弧内に含まれており、角括弧内の任意の文字が一致します;
3. パイプライン「|」: この文字は OR 演算とみなされます。
7. Web ページのタイトル コンテンツを取得します。
正規表現を使用して特定のノードを見つけてそのノード内のリンクとテキスト コンテンツを取得することはできませんが、この機能を実現するには XPath と Beautiful Soup を使用する方が便利です。
8.xpath
- これは、データ構造ツリー内のノードを検索し、XML ドキュメントの特定の部分の位置を決定する XML ベースのツリー構造です。
- (1) 基本文法
の初期化
lxml.etree.HTML(text, parser=None, *, base_url=None)
- (2) 一般的なマッチング表現
- (3) 関数関数
9.美しいスープ
- (1) 作成する
BeautifulSoup("<html>data</html>") #通过字符串创建
BeautifulSoup(open("index.html")) #通过HTML文件创建
- (2) フォーマットされた出力
BeautifulSoup.prettify(self, encoding=None, formatter='minimal')
オブジェクト タイプ
1.タグ オブジェクト タイプ
タグには、名前と属性という 2 つの非常に重要な属性があります。name 属性は name メソッドを通じて取得および変更でき、変更された name 属性は BeautifulSoup オブジェクトによって生成された HTML ドキュメントに適用されます。
2. NavigableString オブジェクトの種類
NavigableString オブジェクトは、「 」の「ヤマネの話」など、タグに含まれるテキスト文字列の内容であり、The Dormouse‘s story string メソッドを使用して取得できます。NavigableString オブジェクトは編集できませんが、replace_with メソッドを使用して置き換えることができます。
3. BeautifulSoup オブジェクトの種類
BeautifulSoup オブジェクトは、ドキュメントのコンテンツ全体を表します。ほとんどの場合、これは Tag オブジェクトと見なされます。BeautifulSoup オブジェクトは実際の HTML タグや XML タグではないため、タグの name 属性とattribute 属性を持ちませんが、値が「[document]」である特別な属性名が含まれています。
4Comment オブジェクトの種類
Tag、NavigableString、BeautifulSoup は HTML と xml のほぼすべてのコンテンツをカバーしますが、いくつかの特殊なオブジェクトもあり、ドキュメントのコメント部分は Tag のテキスト文字列と最も混同されやすい部分です。Beautiful Soup ライブラリは、ドキュメントのコメント部分を Comment 型として認識します。Comment オブジェクトは NavigableString オブジェクトの特殊な型ですが、HTML ドキュメント内に表示される場合、Comment オブジェクトは特殊な形式で出力されるため、prettify メソッドを呼び出す必要があります。
- (3) Search
一般的に使われるのは find メソッドと find_all メソッドで、引数は同じですが、 find_all メソッドは値に 1 つの要素を含むリストが返されるのに対し、 find は直接結果を返す点が異なります。
BeautifulSoup.find_all(name,attrs,recursive,string,**kwargs)
10. データストレージ
データをJSONファイルとして保存する
json.dump(obj,fp,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding='utf-8', default=None, sort_keys=False, **kw)
コード例の分析
1. Web ページのタイトルの取得リクエスト
page = urllib.request.urlopen('https://www.cnki.net/') #获取网页
html = page.read().decode('utf-8')#转换成utf-8
title=re.findall('<title>(.+)</title>',html)#获取title之间所有内容
print (title)#输出
2. ウェブサイトのホットワード
https://weixin.sogou.com/
パスが topwords という名前の ol の下にある li であることがわかると、
ここでは i タグを直接検索しません。すべての i タグに特別なクラス名が付いているわけではないからです (なんてホットなチキンの話でしょう。長い時間が無駄になりました)
- BS4 を入手
html_doc = "https://weixin.sogou.com/"#网页链接
req = urllib.request.Request(html_doc) #构造请求
webpage = urllib.request.urlopen(req) #获取网页
html = webpage.read().decode('utf-8')#utf-8打开
soup = BeautifulSoup(html, 'html.parser')#指定html.parser解析器解析
str=[]
top=soup.find(name="ol", attrs={
"id" :"topwords"})#找到id为topwords的ol标签
for child in top.find_all('a'):#找到子孙标签中所有a标签
#print(child.string)
str.append(child.string)#保存标签内容
filename='sougou.json'
with open(filename,'w') as file_obj:
json.dump(str,file_obj)#写入json文件
with open(filename) as file_obj:
str=json.load(file_obj)#从json文件读取
print(str)
- xpath
url = "https://weixin.sogou.com/" #请求地址
response = requests.get(url= url) #返回结果
wb_data = response.text #文本展示返回结果
html = etree.HTML(wb_data) #将页面转换成文档树
str2=[]
content=html.xpath('//ol[@id="topwords"]/li/a/text()')#获取根节点下id为topwords的ol标签的子li标签的子a标签的内容
for item in content:
#print(item.encode('ISO-8859-1').decode('UTF-8'))
str2.append(item.encode('ISO-8859-1').decode('UTF-8'))#保存
filename2='sougou2.json'
with open(filename2,'w') as file_obj:
json.dump(str2,file_obj)#写入json文件
with open(filename2) as file_obj:
str2=json.load(file_obj)#读取json文件
print(str2)
動的なウェブページは言及されているだけで、書かれていません
✿✿ヽ(゚▽゚)ノ✿サフア終了!