Python での最も単純な Web クローラーのチュートリアル

黄舟
リリース: 2017-08-13 10:41:39
オリジナル
1995 人が閲覧しました

毎日インターネットを閲覧していると、素敵な写真を目にすることが多く、その写真を保存してダウンロードしたり、デスクトップの壁紙やデザイン素材として使用したくなります。次の記事では、Python を使用して最も単純な Web クローラーを実装するための関連情報を紹介します。必要な方は一緒に参照してください。

前書き

ウェブ クローラー (ウェブ スパイダー、ウェブ ロボット、FOAF コミュニティではウェブ チェイサーとしても知られています) は、特定の規則に従って World Wide Web を自動的にクロールする方法です。情報番組またはスクリプト。最近、私は Python クローラーに非常に興味を持っています。ここで私の学習過程を共有し、皆様からの提案を歓迎したいと思います。私たちはお互いにコミュニケーションをとり、一緒に進歩していきます。さっそく、詳細な紹介を見てみましょう:

1. 開発ツール

私が使用するツールは、短くて簡潔な sublime text3 です (おそらく男性はこの言葉が好きではないでしょう)。 . 魅了されました。もちろん、コンピューターの構成が良好であれば、pycharm の方が適しているかもしれません。

sublime text3 を使用して Python 開発環境を構築するには、この記事を確認することをお勧めします:

[sublime を使用して Python 開発環境を構築する]

クローラーは、名前が示すように、上を這うバグのようなものです。インターネット。このようにして、私たちは欲しいものを手に入れることができます。

インターネット上をクロールしたいので、URLを理解する必要があります。正式名は「Uniform Resource Locator」、ニックネームは「link」です。その構造は主に 3 つの部分で構成されます:

(1) プロトコル: URL でよく見られる HTTP プロトコルなど。

(2) ドメイン名または IP アドレス: www.baidu.com などのドメイン名、IP アドレス、つまり、ドメイン名解決後の対応する IP。

(3) パス: ディレクトリまたはファイルなど。

3.urllibは最も単純なクローラーを開発します

(1) URL libの紹介

モジュール 紹介
urllib.error によって発生した例外クラスurllib.request.
urllib.parse URL をコンポーネントに解析するか、コンポーネントから組み立てます。
urllib.request URL を開くための拡張ライブラリ。
urllib.response によって使用される応答クラスurllib.
urllib.robotparser robots.txt ファイルをロードし、他の URL のフェッチ可能性に関する質問に答えます。

(2) 最も単純なクローラーを開発します

Baidu のホームページはシンプルでエレガントで、非常にシンプルで私たち爬虫類に適しています。

クローラーのコードは次のとおりです:


from urllib import request

def visit_baidu():
 URL = "http://www.baidu.com"
 # open the URL
 req = request.urlopen(URL)
 # read the URL 
 html = req.read()
 # decode the URL to utf-8
 html = html.decode("utf_8")
 print(html)

if __name__ == '__main__':
 visit_baidu()
ログイン後にコピー

結果は以下のとおりです:


Baidu ホームページの空白スペースを右クリックして表示すると、実行結果と比較できます。レビュー要素。

もちろん、request は、urlopen メソッドを使用して開くことができる request オブジェクトを生成することもできます。

コードは次のとおりです:


from urllib import request

def vists_baidu():
 # create a request obkect
 req = request.Request('http://www.baidu.com')
 # open the request object
 response = request.urlopen(req)
 # read the response 
 html = response.read()
 html = html.decode('utf-8')
 print(html)

if __name__ == '__main__':
 vists_baidu()
ログイン後にコピー

実行結果は前と同じです。

(3) エラー処理

エラー処理は、主に URLError エラーと HTTPError エラーがあり、URLError エラーによってキャプチャすることもできます。

HTTPError は、その code 属性を通じて捕捉できます。

HTTPError を処理するコードは次のとおりです。


from urllib import request
from urllib import error

def Err():
 url = "https://segmentfault.com/zzz"
 req = request.Request(url)

 try:
 response = request.urlopen(req)
 html = response.read().decode("utf-8")
 print(html)
 except error.HTTPError as e:
 print(e.code)
if __name__ == '__main__':
 Err()
ログイン後にコピー

実行結果は図に示すとおりです。

404 は印刷されたエラー コードです。この詳細情報については、Baidu を参照してください。

URLError は、reason 属性を通じて捕捉できます。

chuliHTTPError のコードは次のとおりです。


from urllib import request
from urllib import error

def Err():
 url = "https://segmentf.com/"
 req = request.Request(url)

 try:
 response = request.urlopen(req)
 html = response.read().decode("utf-8")
 print(html)
 except error.URLError as e:
 print(e.reason)
if __name__ == '__main__':
 Err()
ログイン後にコピー

実行結果は図に示すとおりです。


エラーを処理するには、両方のエラーを結局のところ、コードは詳細であればあるほど明確になります。 HTTPError は URLError のサブクラスであるため、HTTPError を URLError の前に置く必要があることに注意してください。そうしないと、404 が Not Found として出力されるなど、URLError が出力されます。

コードは次のとおりです:


from urllib import request
from urllib import error

# 第一种方法,URLErroe和HTTPError
def Err():
 url = "https://segmentfault.com/zzz"
 req = request.Request(url)

 try:
 response = request.urlopen(req)
 html = response.read().decode("utf-8")
 print(html)
 except error.HTTPError as e:
 print(e.code)
 except error.URLError as e:
 print(e.reason)
ログイン後にコピー

URLを変更して、さまざまなエラーの出力フォームを表示できます。

概要

以上がPython での最も単純な Web クローラーのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート