Python クローラーを使い始めたい場合は、まず次の 4 つの問題を解決する必要があります。
- Pythonプログラミングに精通している
- HTML について学ぶ
- Web クローリングの基本原則を理解する
- Python クローラー ライブラリの使用方法を学ぶ
1. クローラーについて知っておくべきことは何ですか?
Web クローラーは、実際にはネットワーク データ収集と呼ばれ、理解しやすいです。
プログラミングによってネットワークサーバーにデータ(HTML形式)を要求し、そのHTMLを解析して必要なデータを抽出するものです。
これは 4 つの主要なステップに要約できます。
- URLに基づいてHTMLデータを取得する
- HTMLを解析して対象情報を取得する
- データの保存
- ステップ 1 を繰り返します
これには、データベース、Web サーバー、HTTP プロトコル、HTML、データ サイエンス、ネットワーク セキュリティ、画像処理などが含まれます。しかし、初心者の場合、それほどマスターする必要はありません。
2. Python をどの程度学習する必要がありますか?
Python を知らない場合は、(他の言語に比べて) 非常に簡単な言語である Python を最初に学ぶ必要があります。
プログラミング言語の基本的な構文は、データ型、データ構造、演算子、論理構造、関数、ファイル IO、エラー処理などにすぎません。学ぶのは退屈かもしれませんが、難しくはありません。
クローラーを始めたばかりの場合は、Python のクラスやマルチスレッド、モジュールなどの少し難しい内容を学ぶ必要さえありません。初心者向けの教科書やオンライン チュートリアルを探し、10 日以上費やすと、Python の基本を 30 ~ 40% 理解できるようになります。この時点で、クローラーで遊ぶことができます。
もちろん、この 10 日間で注意深くコードを入力し、文法ロジックを繰り返し噛み砕くことが前提です。たとえば、リスト、辞書、文字列、if 文、for ループなどの核となるものに精通している必要があります。心と手で。
Nuke.com にアクセスしてオンラインで練習することができます。この Python 入門質問シートでは、Hello World の初歩から実践的なタスク、データ分析、機械学習、どの関数を使用するか、どのように入力する必要があるかまで、非常に詳細にガイドします。出力。
教材の選択肢はたくさんありますが、個人的には前者は体系的で内容が充実しており、後者は簡潔なPython 公式ドキュメントとPython Concise チュートリアル がおすすめです。
3. HTML を理解する必要がある理由
前述したように、クローラーがクロールしたいデータは Web ページの HTML の中に隠されているため、少しわかりにくくなります。
Wikipedia では HTML を次のように説明しています。
ハイパーテキスト マークアップ言語 ( 英語: Hyper Text Markup Language、略称: HTML ) は、 Web ページ の作成に使用される標準の マークアップ言語です。HTML は、Web ページ、Web アプリケーション、モバイル アプリケーションのユーザー インターフェイスを設計するために、 多くの Web サイトでCSSや JavaScriptとともによく使用される基本テクノロジです [3]。 Web ブラウザはHTML ファイルを読み取り、それを視覚的な Web ページにレンダリングできます。HTML は、ヒントが提示されると Web サイトの構造的意味論を記述するため、 プログラミング言語ではなくマークアップ言語になります。
要約すると、HTML は Web ページの作成に使用されるマークアップ言語であり、テキスト、画像、その他のデータが埋め込まれており、これらのデータはブラウザーで読み取って、表示される Web ページにレンダリングできます。
データは HTML に隠されているため、最初に HTML をクロールしてからデータを解析します。
HTML の学習は難しくありません。HTML はプログラミング言語ではありません。マークアップ ルールを理解するだけで十分です。ここで簡単に説明しましょう。
HTML マークアップには、タグ (およびその属性)、文字ベースのデータ型、文字参照、エンティティ参照など、いくつかの重要な部分が含まれています。
HTML タグが最も一般的で、通常はwith となどのペアで表示されます。<h1>
</h1>
これらのペアで現れるタグのうち、最初のタグが開始タグ、2 番目のタグが終了タグです。2 つのタグの間には、要素のコンテンツ (テキスト、画像など) が入ります。一部のタグにはコンテンツがなく、空の要素になります ( など) 。<img>
以下は、古典的なHello Worldプログラムの例です。
HTML ドキュメントは、ネストされた HTML 要素で構成されます。これらは、 [56]のように山かっこで囲まれた HTML タグで表されます。<p>
一般に、要素は「開始タグ」と「終了タグ」という1 対のタグで表されます。テキスト コンテンツを含む要素は、これらのタグの間に配置されます。<p>
</p>
4. Python Web クローラーの基本原理を理解する
Python クローラー プログラムを作成するときは、次の 2 つのことだけを行う必要があります。
- GET リクエストを送信して HTML を取得します
- HTMLを解析してデータを取得する
Python には、これら 2 つのことを行うのに役立つ対応するライブラリがあり、それらの使用方法を知る必要があるだけです。
5. Python ライブラリを使用して、Baidu ホームページのタイトルと写真をクロールします。
まず、HTML データのリクエストを送信するには、Python の組み込みライブラリ urllib を使用できます。このライブラリには、URL に基づいて HTML ファイルを取得できる urlopen 関数があります。ここでは、Baidu ホームページ「 https」のHTML コンテンツを取得してみます。://www.baidu.com/ "で効果を確認してください。:
実際の Baidu ホームページの HTML がどのようなものかを見てみましょう。Google Chrome を使用している場合は、Baidu ホームページで [設定] > [その他のツール] > [開発者ツール] を開き、要素をクリックすると表示されます。
比較すると、Python プログラムを通じて取得した HTML が Web ページ内の HTML と同じであることがわかります。
HTML を取得したら、次は HTML を解析しますが、必要なテキスト、画像、ビデオはすべて HTML 内に隠されているため、何らかの方法で必要なデータを抽出する必要があります。
Python には、HTML の解析に役立つ強力なライブラリも多数提供されています。ここでは、有名な Python ライブラリBeautifulSoup を、上記で取得した HTML を解析するツールとして使用します。
BeautifulSoup はサードパーティのライブラリであり、インストールして使用する必要があります。コマンドラインで pip を使用してインストールするだけです。
pip install bs4
BeautifulSoup は HTML コンテンツを構造化コンテンツに変換します。必要なのは構造化タグからデータを抽出することだけです。
このタイトルは、第 1 レベルのタグ <head><head> と第 2 レベルのタグ <title><title> の 2 つのタグで囲まれているので、タグから情報を取り出すだけです。
# 导入urlopen函数
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 请求获取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 打印标题
print(title)
以上で、Baidu ホームページのタイトルが正常に抽出されました。
Baidu ホームページのロゴ画像をダウンロードしたい場合はどうすればよいですか?
最初のステップは、Web ページのすべてのイメージ タグと URL を取得することです。タグに含まれる情報を抽出できる BeautifulSoup の findAll メソッドを使用できます。
一般的に、HTML 内のすべての画像情報は「img」タグ内にあるため、findAll("img") を通じてすべての画像の情報を取得できます。
# 导入urlopen
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 请求获取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 使用find_all函数获取所有图片的信息
pic_info = obj.find_all('img')
# 分别打印每个图片的信息
for i in pic_info:
print(i)
結果を見てみましょう:
class (要素クラス名)、src (リンクアドレス)、長さ、幅、高さなど、すべての画像の属性が出力されます。
Baidu のホームページのロゴの画像がありますが、その画像のクラス(要素クラス名)は、index-logo-src です。
[<img class="index-logo-src" height="129" hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" usemap="#mp" width="270"/>, <img alt="到百度首页" class="index-logo-src" src="//www.baidu.com/img/baidu_jgylogo3.gif" title="到百度首页"/>]
画像のリンク アドレスが src 属性に含まれていることがわかります。画像のリンク アドレスを取得する必要があります。
# 导入urlopen
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 请求获取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 只提取logo图片的信息
logo_pic_info = obj.find_all('img',class_="index-logo-src")
# 提取logo图片的链接
logo_url = "https:"+logo_pic_info[0]['src']
# 打印链接
print(logo_url)
結果:
アドレスを取得したら、urllib.urlretrieve 関数を使用してロゴ画像をダウンロードできます。
# 导入urlopen
from urllib.request import urlopen
# 导入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 导入urlretrieve函数,用于下载图片
from urllib.request import urlretrieve
# 请求获取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),'html.parser')
# 从标签head、title里提取标题
title = obj.head.title
# 只提取logo图片的信息
logo_pic_info = obj.find_all('img',class_="index-logo-src")
# 提取logo图片的链接
logo_url = "https:"+logo_pic_info[0]['src']
# 使用urlretrieve下载图片
urlretrieve(logo_url, 'logo.png')
最終的な画像は「logo.png」に保存されます
6. 結論
この記事では、Baidu ホームページのタイトルとロゴ画像をクロールする場合を例に、Python クローラーの基本原理と関連する Python ライブラリの使用法を説明します。これは比較的基本的なクローラーの知識であり、多くの優れた Python クローラー ライブラリとフレームワークが学習を待っています。後で。
もちろん、この記事で説明した知識ポイントをマスターしていれば、すでに Python クローラーに精通していることになります。さあ、坊や!
最後に、Python の実際の質問をブラッシュアップするための Web サイトもあります。
知識ポイントを絞った特別演習や、自分で選べる問題集もあり、すべて無料でご利用いただけますので、興味のある方はぜひお試しください。