密かにPythonを学び、みんなに衝撃を与えたい(7日目)

ここに写真の説明を挿入

タイトルは気分を害するものではありませんが、この広告は楽しいと思います
。よろしければ上記のマインドマップをご覧ください。とにかくあまり学ぶことができません。

序文

初期のレビュー:Pythonを密かに学び、みんなに衝撃を与えたい(6日目)

前日、今日はクローラーについて学びます、はい、今日はクロールを開始します

ここに写真の説明を挿入

本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python,这里也要感谢齐锋学长送来的支持。
本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?

我要的不多,点个关注就好啦
然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。

本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。

Xiaobaiの場合は、次の段落を見ることができます。

私たちのサークルへようこそ

私はPythonQ&Aグループを作成しました。興味のある友人は、次のことを知ることができます。これはどのようなグループですか。

グループを介したポータル:ポータル


最初に見たクローラー

皆さんと同じように、私は初めて自分でクローラーをプレイしました。以前は人にクロールされていました。
ただ、私は大ボスではないので、あまり背の高いクロールスキルは出てこないので、少しずつ見ていきましょう。

WebクローラーはWebスパイダーとも呼ばれます。Webアドレス(URL)に従ってWebコンテンツをクロールし、Webアドレス(URL)はブラウザーに入力するWebサイトリンクです。例:https://www.baidu.com/、これはURLです。

なぜクローラー

一般的な検索エンジンの処理対象はインターネットWebページです。現在のインターネットWebページ数は数百億に達しています。したがって、検索エンジンの最初の問題は、このような大量のWebページデータをローカルエリアに送信する効率的なダウンロードシステムをどのように設計するかです。インターネットWebページのミラーバックアップをローカルに作成します。

Webクローラーはそのような役割を果たし、この難しいタスクを完了することができます。これは、検索エンジンシステムの非常に重要で基本的なコンポーネントです。

非常に一般的な栗を与える:バイドゥ。
Baiduは、何千ものWebサイトを継続的にクロールし、独自のサーバーに保存する会社です。Baiduでの検索の本質は、サーバー上の情報を検索することです。見つかった結果はいくつかのハイパーリンクです。ハイパーリンクがリダイレクトされた後、他のWebサイトにアクセスできます。

一般的なクローラーアーキテクチャ

OK、上の写真を理解できますか?そうでない場合は、Webサイトにアクセスするユーザーのいくつかのフローチャートを見てみましょう。

ここに写真の説明を挿入

これは人間とコンピューターの相互作用プロセスであるため、この閉ループでクローラーがどのような作業を置き換えることができるかを見てみましょう。
ここに写真の説明を挿入

はい、それは私たちの「人工知能」の特性と非常に一致しており、私たちの手を解放します。

クローラーの作業手順

1步:获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。

第2步:解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。

第3步:提取数据。爬虫程序再从中提取出我们需要的数据。

第4步:储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。

これがクローラーの仕組みです。学習の内容が後でどのように変化しても、コアはクローラーの原則です。

この章の目的は、クローラーを簡単に理解することであるため、あまりにも多くの不要な概念が拡張されることはありません。

優れたクローラーの特徴

良いコードにはこれらの特徴があるようです。
しかし、誰もが良いアーキテクチャの特徴を知ることができますか?私の目を輝かせて、「兄さん、連れて行って」と叫びました。

1.高性能

ここでのパフォーマンスとは、主にクローラーがWebページをダウンロードするときのクロール速度を指します。一般的な評価方法は、パフォーマンス指標として1秒あたりにダウンロードできるWebページの数です。単位時間あたりにダウンロードできるWebページが多いほど、クローラーのパフォーマンスは高くなります。

クローラーのパフォーマンスを向上させるために、設計時にディスクにアクセスするプログラムの操作方法(ディスクIO)そして実装データ構造選択は非常に重要です。たとえば、クロールされるURLキューとクロールされたURLキューの場合、URLの数が非常に多いため、さまざまな実装方法のパフォーマンスが大きく異なり、効率的なデータ構造がクローラーのパフォーマンスに大きな影響を与えます。

2.スケーラビリティ

単一のクローラーのパフォーマンスが高い場合でも、すべてのWebページをローカルにダウンロードするには長い時間がかかります。クロールサイクルを可能な限り短縮するには、クローラーシステムのスケーラビリティが優れている必要があります。つまり、簡単に増やすことができます。この目標を達成するには、サーバーとクローラーの数を取得します。

現在利用可能な大規模なWebクローラーは分散させる必要があります。つまり、複数のサーバーをクロール専用にします。各サーバーは複数のクローラーを展開し、各クローラーは複数のスレッドで実行され、さまざまな方法で同時実行性を高めます。

巨大な検索エンジンサービスプロバイダーの場合、データセンターはグローバルにさまざまな地域に展開され、クローラーもさまざまなデータセンターに割り当てられます。これは、クローラーシステムの全体的なパフォーマンスを向上させるのに非常に役立ちます。

3.堅牢性

クローラーはさまざまなタイプのWebサーバーにアクセスする必要があり、多くの異常な状況が発生する可能性があります。たとえば、WebページのHTMLコーディングが標準化されていない、クロールされたサーバーが突然クラッシュしたり、トラップにクロールしたりします。クローラーがさまざまな異常な状況を正しく処理できることが非常に重要です。そうしないと、クローラーが時々動作を停止する可能性があり、耐えられません。

別の見方をすれば、クローラープログラムがクロールプロセス中に停止するか、クローラーが配置されているサーバーがダウンしていると仮定すると、堅牢なクローラーは次のことができるはずです。クローラーが再度起動されると、以前にクロールされたコンテンツとデータ構造を復元できます。毎回すべての作業を最初から開始する必要はなく、これはクローラーの堅牢性の表れでもあります。

4.フレンドリー

クローラーの使いやすさには2つの意味があります。1つはWebサイトのプライバシーの一部を保護することであり、もう1つはクロールされたWebサイトのネットワーク負荷を軽減することです。クローラーがクロールするオブジェクトはさまざまな種類のウェブサイトです。ウェブサイトの所有者にとって、一部のコンテンツは誰もが検索したくないため、クロールが許可されていないコンテンツをクローラーに通知するプロトコルを設定する必要があります。現在、この目標を達成するための2つの主流の方法があります。クロール禁止プロトコルとWebページ禁止マークです。

この点については後ほど詳しく説明します。


爬虫初体验

Webクローラーの最初のステップは、URLに基​​づいてWebページのHTML情報を取得することです。Python3では、urllib.requestとrequestsを使用してWebページをクロールできます。

 urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用这个库。
 requests库是第三方库,需要我们自己安装。

リクエストライブラリの基本的なメソッドは次のとおりです。
ここに写真の説明を挿入

requests.get()

疑似コードの一部を見てください。

import requests
#引入requests库
res = requests.get('URL')
#requests.get是在调用requests库中的get()方法,
#它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。
#我们把这个响应返回的结果赋值在变量res上。

私はグループで彼らに、Pythonを学ぶための最も重要なことは、データタイプとデータ構造から始めて基礎を築くことであると話しました。
次に、データを取得するためのクローラーの戻り値がどのデータタイプであるかを見てみましょう。

:まずちょうどURLバーを見つけること、または小さなカメのURLバーの先頭に
http://photogz.photo.store.qq.com/psc?/V12wi4eb4HvNdv/ruAMsa53pVQWN7FLK88i5qLH0twfxCgrwzDJPH6IRZadTdk*QTPnqFYrVt5PNiU7vBOh1cvefk4UXqNZcMdzLWowRX1pF4GqWoBZ7YPq5AQ!/b&bo=eAFyAXgBcgERECc!

URLは少し長くなりますが、実験することができます。

import requests 
res = requests.get('URL') 
print(type(res))
#打印变量res的数据类型

結果:<class'requests.models.Response '>

Responseオブジェクトの4つの一般的に使用される属性

ここに写真の説明を挿入

1つ目はstatus_codeです。これは非常に一般的に使用される属性であり、リクエストが成功したかどうかを確認するために使用されます。戻り値を出力して確認できます。
ここに写真の説明を挿入

次の属性はresponse.contentで、これはResponseオブジェクトのコンテンツをバイナリデータの形式で返すことができます。これは、写真、オーディオ、およびビデオのダウンロードに適しています。例を見るとわかります。
その小さな亀を降りてみましょう、私はそれを私のQQスペースに置きます:

import requests
res = requests.get('http://photogz.photo.store.qq.com/psc?/V12wi4eb4HvNdv/ruAMsa53pVQWN7FLK88i5qLH0twfxCgrwzDJPH6IRZadTdk*QTPnqFYrVt5PNiU7vBOh1cvefk4UXqNZcMdzLWowRX1pF4GqWoBZ7YPq5AQ!/b&bo=eAFyAXgBcgERECc!')
#发出请求,并把返回的结果放在变量res中
pic=res.content
#把Reponse对象的内容以二进制数据的形式返回
photo = open('乌龟.jpg','wb')
#新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
#图片内容需要以二进制wb读写。你在学习open()函数时接触过它。
photo.write(pic)
#获取pic的二进制内容
photo.close()
#关闭文件

自分のスペースで小さな写真をクロールすることもできます。
何人かの友人は尋ねます:どうすれば私の小さな写真のURLを知ることができますか?
実際、簡単に行うことができます。小さな写真を右クリックして新しいタブを開きます。URLをお持ちではありませんか?

何があっても、このブログの小さな写真をドラッグして新しいウィンドウにドラッグするだけで、URLがそこに表示されます。

さて、今日の練習はおそらくここにあります。


response.contentについて話し合った後、引き続きresponse.textを確認します。この属性は、応答オブジェクトのコンテンツを文字列の形式で返すことができます。これは、テキストに適しています。Webページのソースコードダウンロード。

はっきり見てください、それはソースコードです。

ここで、私のブログのWebサイトなどのWebサイトを見つけて、体験してみましょう。

import requests
#引用requests库
res = requests.get('https://editor.csdn.net/md?articleId=109320746')
novel=res.text
#把Response对象的内容以字符串的形式返回
k = open('《第七天》.txt','a+')
#创建一个名为《第七天》的txt文档,指针放在文件末尾,追加内容
k.write(novel)
#写进文件中     
k.close()
#关闭文档

次に、最後の属性であるresponse.encodingを確認します。これは、Responseオブジェクトのエンコーディングを定義するのに役立ちます。

まず第一に、ターゲットデータ自体のエンコーディングは不明です。requests.get()を使用してリクエストを送信した後、Responseオブジェクトを取得します。ここで、リクエストライブラリはデータのエンコードタイプを独自に判断します。だが!この判断は正確である場合とそうでない場合があります。

判断が正確である場合、印刷するresponse.textの内容は正常であり、文字化けしたコードがない場合、res.encodingは使用されません。判断が正確でない場合、文字化けしたコードが多数存在するため、確認できます。ターゲットデータのエンコーディング。次に、res.encodingを使用して、ターゲットデータと一致するタイプとしてエンコーディングを定義します。


私は話すのにうんざりしています、もう少し言及しましょう。

私たちの国には完全な法律があります

実際、我が国のクローラーに関する法律はまだ改善されていないので、できるだけ早くクロールしてください。

通常の状況では、サーバーは小さなクローラーを気にしませんが、サーバーに大きな圧力や害をもたらすため、サーバーは大きなクローラーや悪意のあるクローラーの高頻度を拒否します。
ただし、サーバーは一般的に検索エンジンに歓迎されます(先ほど述べたように、GoogleとBaiduのコアテクノロジーの1つはクロールです)。もちろん、これは条件付きであり、これらの条件はロボット契約に記載されます。

Robotsプロトコルは、インターネットクローラーに認められている倫理規定であり、そのフルネームは「Robots exclude protocol」です。このプロトコルは、クロール可能なページとクロールできないページをクローラーに通知するために使用されます。
ウェブサイトのロボット契約を確認する方法は非常に簡単です。ウェブサイトのドメイン名の後に/robots.txtを追加するだけです。

契約で最も頻繁に使用される英語は、許可と不許可です。許可はアクセスを表し、不許可は禁止されたアクセスを表します。

ツールはあなたの手の中にあり、それを使用する方法はあなたの選択です。Webサイトのデータをクロールするときは、WebサイトのRobotsプロトコルでクロールが許可されているかどうかを確認することを忘れないでください。

同時に、クローラーの速度を制限し、データを提供するサーバーに感謝し、過度のプレッシャーを回避し、適切なインターネットの順序を維持することが私たちのすべきことです。

以上が本日お話しする内容です。次回はそれらのWebページを分析し、Webページに必要なものを取得します。

ここに写真の説明を挿入
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/qq_43762191/article/details/109320746