クローラーの学習 (01): クローラーとハイパーテキスト転送プロトコルを理解する

1. 爬虫類の紹介

爬虫類とは何ですか?

つまり、私たちは常に重要なデータ情報をインターネット上に保存したいと考えています为己所用
例:

  • 血が沸騰するような素晴らしい写真を閲覧したとき、将来それらをデスクトップの壁紙として保存したいと常に思っていました。
  • 重要なデータ (あらゆる分野) を閲覧するときは、将来のさまざまな販売行動に光沢を加えるために保存しておきたいと考えています。
  • 奇妙で刺激的なビデオを閲覧するときは、後で味わうためにハードディスクに保存したいと考えています。
  • いくつかの優れた歌のトラックを閲覧するとき、私たちの退屈な生活に素晴らしい部分を追加するためにそれらを保存したいと思います

能看见的东西クロールされるのはの一部である必要があることに注意してください公开

レプティリアンの槍と盾

反爬机制:

  • ポータル Web サイトは、対応する技術的手段 (暗号化) を策定することで、策略クローラーが Web サイト データをクロールするのを防ぐことができます。

反反爬策略(JS 逆引き):

  • クローラー プログラムは、ポータル Web サイトで策略或者技术手段関連する破解クローリング防止メカニズムを構築することにより、ポータル Web サイト内の関連データを取得できます。
robots.txt プロトコル: Baidu Spider

一般に として知られています君子协议Web サイト内のどのデータが以被爬虫爬取クロールできるか、どのデータがクロールできないかを指定します。各 Web サイトのサフィックスに robots.txt を追加するだけです。

これはタオバオにおける紳士協定ですこれはタオバオにおける紳士協定です

2. Web リクエストのプロセス (例として Baidu)

にアクセスすると百度、ブラウザは请求今度は Baidu のサーバー (Baidu のコンピュータ) に送信し、サーバーは接收このリクエストを受信し、データをロードしてブラウザに返し、ブラウザはそれを表示します。 Baidu のサーバーは、ページを直接ブラウザに返すのではなく、页面源代码(html、css、js で構成される)ページのソース コードを実行し、その浏览器結果をユーザーに表示します。源代码理解できない幽霊の山)具体的なプロセスを図に示します。
ここに画像の説明を挿入

2.1 ページのレンダリング

ここで、すべてのデータがページのソース コード上にあるわけではないことに注意してください。一部のデータは动态加载js などのツールを介して取り込まれます。これが页面渲染数据プロセスです。一般的なページ レンダリング プロセスには 2 つあり、1 つは と呼ばれ服务器渲染、もう 1 つは と呼ばれます。前端JS渲染

1. サーバーレンダリング -> ページソースコード内でデータを直接検索可能

私たちがサーバーにリクエストすると、サーバーはデータをサーバー全部写入に直接送信し、ブラウザはデータの HTML コンテンツを運ぶことができます。データは HTML に直接書かれているため、表示できるすべてのデータは This にあります通常クロールできるWeb ページの種類html直接拿到
页面源代码
相对比较容易页面内容

2. フロントエンド JS レンダリング -> ページのソース コードでデータが見つかりません

これは少し面倒です。通常、このメカニズムは、多数の HTML フレーム構造を返すサーバーへの最初のリクエストです。次に、再次请求データの実際のストレージに服务器サーバーがデータを返し、最後に にデータが返されます浏览器上对数据进行加载。次のようになります。
ここに画像の説明を挿入
何がロードされていますか? 実際、ページを下にスクロールすると、jd が密かにデータをロードしています。この時点で、このページをロードするプロセス全体を確認したい場合は、ブラウザのデバッグ ツール (F12) を使用する必要があります。
ここに画像の説明を挿入
そのため、ページのソース コードでページに表示されているデータが見つからない場合は、デバッグ ツール (F12) で関連する左側を見つけることができ、数据包データはデータ パッケージに隠されています (最初に F12 デバッグ ツールを開いてからページを更新することを忘れないでください。そうしないとデータがロードされ、データ パケットにコンテンツがありません。)

3. ブラウザツールの使用 (強調)

ブラウザは、Web ページのステータスや Web ページに読み込まれたコンテンツを確認するのに最も直感的な場所です。ボタンF12を押す通常のユーザーがめったに使用しないいくつかのツールが表示されます。その中で、最初の 4 つは
ここに画像の説明を挿入
最も重要ですElements, Console, Sources, Network

1. 要素

要素は us であり实时的网页内容情况、場合によっては并不是页面源代码、フロントエンド JS によってレンダリングされたコンテンツも表示されます。これは Web ページのリアルタイムのコンテンツです

知らせ、

  1. 页面源代码これは、js スクリプトとユーザー操作を実行する之前サーバーによって返されます。最原始的内容
  2. Elementsで見られる内容はjs脚本以及用户操作之后その時のページ表示効果です。

老师批改之前的卷子どちらかが で、もう一方が であることがわかります老师批改之后的卷子。同じ論文ですが、内容は異なります。そして、現時点で入手できるのは、そのページのソースコードです。修正前の先生の様子です。この点は、特別な注意を払う必要があります。

Elements使えます左上角的小箭头ブラウザ上で各ブロックの位置が直感的に分かります对应的当前html状况相変わらず丁寧です。
ここに画像の説明を挿入

2. コンソール

2 番目のウィンドウは、Consoleプログラマーが残した印刷コンテンツとログコンテンツを表示するために使用され、ここに js コードを入力して自動的に実行できます。
ここに画像の説明を挿入

3. ソース

3 番目のウィンドウはSource、ここに表示されます该网页打开时加载的所有内容。ページのソース コード、スクリプト、スタイル、画像などが含まれています。
ここに画像の説明を挿入

4. ネットワーク

4 番目のウィンドウは、Network通常、 と呼ばれることがよくあります抓包工具。つまり、先ほど述べたフロントエンド JS レンダリングがここに表示され、当前网页加载的所有网络请求と が表示されます请求的详细内容。これは、クローラーにとって非常に重要です。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

4. ハイパーテキスト転送プロトコル

协议: 2 台のコンピュータ間で円滑な通信を行うために設定されるプロトコルで君子协定、一般的なプロトコルには TCP/IP、SOAP プロトコル、HTTP プロトコル、SMTP プロトコルなどが含まれます。

プロトコルが異なる 送信データのフォーマットが異なります。

HTTP协议Hyper Text Transfer Protocol(ハイパーテキスト転送プロトコル)の略で、World Wide Web(WWW:World Wide Web)サーバーからローカルブラウザにハイパーテキストを転送するために使用される転送プロトコルです浏览器和服务器之间的数据交互遵守的就是HTTP协议

最も一般的に使用される HTTP プロトコルは です加载网页

HTTP プロトコルは、メッセージを3 つのコンテンツに分割します三大块内容请求响应

聞く:

请求行 -> 请求方式(get/post) 请求url地址 协议
请求头 -> 放一些服务器要使用的附加信息(cookie验证,token,各式各样的反扒信息)

请求体 -> 一般放一些请求参数

応答:

状态行 -> 协议 状态码 
响应头 -> 放一些客户端要使用的一些附加信息(cookie验证,token,各式各样的反扒信息)

响应体 -> 服务器返回的真正客户端要用的内容(HTML,json)等 页面代码

クローラーを作成するときは特に注意してください请求头和响应头。これら 2 つの場所は通常、隐含着一些比较重要的内容

注意では、ブラウザが実際にHTTPリクエストとレスポンスの内容を再構成し、私たちにとって読みやすい効果として表示しています。

ここに画像の説明を挿入

リクエストヘッダーの最も重要なコンテンツの一部常见(クローラーが必要とする):

  1. User-Agent: リクエストのキャリア身份标识(リクエストの送信に使用されるもの)
  2. Referer: 防盗链(このリクエストはどのページから来たものですか? アンチクロールが使用されます)
  3. cookie:ローカル文字列データ情報(ユーザーログイン情報、登山防止トークン)
  4. Content-Type: サーバーはクライアントに応答します数据类型(str、json など)。

応答ヘッダーの一部重要的内容:

  1. cookie: ローカル文字列データ情報 (ユーザーのログイン情報、クローリング防止トークン)
  2. あらゆる種類の魔法の莫名其妙文字列 (これには、さまざまな攻撃やアンチクライミングを防ぐための経験、通常は単語トークンが必要です)

httpsプロトコル

とほぼhttp协议同じです。s「安全」を意味し、「」を意味します安全的超文本传输协议(データ暗号化)

暗号化方式(3種類)

1. 対称鍵暗号化

これは、暗号化が完了した後、クライアントが最初に、サーバーがそのキーを使用して暗号文データを復号化し、最後に暗号化を解除することを将即将发送给服务器端的数据意味ます数据加密加密的方式是由客户端自己指定的密文包括解密的方式(密钥)一块发送给服务器端接收到了密钥和加密的密文数据服务器端会获得原文数据

デメリット
  • キーと暗号文が処理されると数据传输的过程中、サードパーティ組織が拦截それを入手する可能性が非常に高くなります存在数据暴露的风险
    ここに画像の説明を挿入
2. 非対称キー暗号化

対称暗号化の潜在的な安全上の危険を目的として、改良された暗号化方式が使用されています。使用時には 2 つのロックがあり、1 つは「 」、もう 1 つは「 」と呼ばれます。非オブジェクト暗号化を使用する場合、サーバーは最初にクライアントに通知し私有密钥ます公开密钥公开密钥加密处理クライアントが指示に従っ公开密钥加密、サーバーは情報を受信し、自己的私有密钥それを復号化します。この利点は解密的钥匙根本就不会进行传输です避免了被挟持的风险たとえ盗聴者によって公開鍵が入手されたとしても、復号処理は離散対数を評価することになるため、復号することは困難です。

欠点:
  • 1. 效率比较低、処理がより複雑であり、通信プロセスに一定の効率の問題があります影响通信速度
  • 2. 鍵を送信する限り、乗っ取られる危険性があるため、仲介機関が公钥篡改クライアントに送信する場合、不能保证クライアントが取得した公開鍵はサーバーで作成する必要があります。

ここに画像の説明を挿入

3. 証明書キーの暗号化

非対称キー暗号化の欠陥を考慮すると、クライアントが取得した公開キーがサーバーによって作成される必要があることを保証できないため、証明書キー暗号化が導入されています。
サーバーの開発者は を持ち公开密钥向数字证书认证机构提出公开密钥的申请デジタル証明書認証局は认清申请者的身份審査に合格した後、开发者申请公開鍵を作成し数字签名分配这个已经签名的公开密钥その鍵证书を内部に入れてバインドします。
クライアントはデジタル証明書のデジタル署名を使用して、サーバーから渡された公開キーが本物であることを確認するため、サーバーは数字证书发送给客户端これを使用します。一般に、それは認証機関の信頼性に依存します。情報が正しいことが確認されると、その情報メッセージを通過し受信後に独自の情報を使用します​​​​客户端也认可证书机构验证公钥的真伪证书的数字签名很难被伪造的客户端公钥加密发送服务器私钥进行解密
ここに画像の説明を挿入

V. まとめ

  1. 必要なものはページのソースコードにあり、源代码抽出されたデータを直接取得するだけです
  2. 必要なものはページのソース コードに含まれていないため、データをロードするための実際のリクエストを見つける方法を見つけて、データを抽出する必要があります。
  3. 注意遵守君子协定
  4. リクエストヘッダーの共通コンテンツ: User-AgentreferercookieContent-Type

おすすめ

転載: blog.csdn.net/m0_48936146/article/details/127281659