検索
ホームページバックエンド開発Python チュートリアルPython クローラーを使用して HTML ページを解析する方法

Python を使用した HTML ページの解析

通常、必要なデータを取得するには、Web クロールされたページを解析する必要があります。 HTMLタグの結合構造を解析することで、Webページに含まれる有益な情報を抽出することができます。 Python では、HTML を解析する一般的な方法が 3 つあります。それは、正規表現解析、XPath 解析、および CSS セレクタ解析です。

HTML ページの構造

HTML 解析方法を説明する前に、HTML ページの基本構造を理解することが前提条件です。ブラウザで Web サイトを開き、マウスの右クリック メニューから [Web ページのソース コードの表示] メニュー項目を選択すると、Web ページに対応する HTML コードが表示されます。 HTML コードは通常、タグ、属性、テキストで構成されます。ラベルにはページに表示されるコンテンツが含まれ、属性はラベル情報を補足し、テキストはラベルによって表示されるコンテンツです。以下は、単純な HTML ページ コード構造の例です。

<!DOCTYPE html>
<html>
    <head>
        <!-- head 标签中的内容不会在浏览器窗口中显示 -->
        <title>这是页面标题</title>
    </head>
    <body>
        <!-- body 标签中的内容会在浏览器窗口中显示 -->
        <h2 id="这是一级标题">这是一级标题</h2>
        <p>这是一段文本</p>
    </body>
</html>

この HTML ページ コード例では、 はドキュメント タイプ宣言です。 <code> タグはページ全体のルートタグであり、## のサブタグです。 # タグを配置します。 タグの下のコンテンツがブラウザ ウィンドウに表示されます。コンテンツのこの部分は Web ページの本体であり、&lt の下のコンテンツはブラウザ ウィンドウに表示されます。 ;head> タグはブラウザ ウィンドウには表示されません。ブラウザ ウィンドウには表示されますが、通常 Web ページのヘッダーと呼ばれる、ページの重要なメタ情報が含まれています。 HTML ページの一般的なコード構造は次のとおりです。 <pre class='brush:php;toolbar:false;'>&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;!-- 页面的元信息,如字符编码、标题、关键字、媒体查询等 --&gt; &lt;/head&gt; &lt;body&gt; &lt;!-- 页面的主体,显示在浏览器窗口中的内容 --&gt; &lt;/body&gt; &lt;/html&gt;</pre> タグ、カスケード スタイル シート (CSS)、および JavaScript は、HTML ページを構成する 3 つの基本コンポーネントです。タグはページに表示されるコンテンツを運ぶために使用され、CSS はページのレンダリングを担当し、JavaScript はページのインタラクティブな動作を制御するために使用されます。 HTML ページを解析するには、もともと XML のクエリ構文である XPath 構文を使用できます。HTML タグの階層構造に基づいて、コンテンツやタグ内のタグ属性を抽出できます。さらに、CSS セレクターを使用してページを見つけることもできます. 要素は、CSS を使用してページ要素をレンダリングするのと同じです。

XPath 解析

XPath は、XML (eXtensible Markup Language) ドキュメント内の情報を検索するための構文です。XML は HTML に似ており、タグを使用してデータを運ぶタグ言語です。その理由は、XML タグは拡張可能でカスタマイズ可能であり、XML にはより厳格な構文要件があるためです。 XPath はパス式を使用して XML ドキュメント内のノードまたはノード セットを選択します。ここで言及されるノードには、要素、属性、テキスト、名前空間、処理命令、コメント、ルート ノードなどが含まれます。

XPath パス式はファイル パス構文に似ており、「/」と「//」を使用してノードを選択できます。ルート ノードを選択する場合は単一のスラッシュ「/」を使用でき、任意の位置のノードを選択する場合は二重スラッシュ「//」を使用できます。例えば、「/bookstore/book」は、ルートノードbookstoreの下にあるすべてのbookサブノードを選択することを意味し、「//title」は、任意の位置のタイトルノードを選択することを意味します。

XPath は述語を使用してノードをフィルタリングすることもできます。角括弧内のネストされた式には、数値、比較演算子、または述語として機能する関数呼び出しを指定できます。たとえば、「/bookstore/book[1]」は書店の最初の子ノード book を選択することを意味し、「//book[@lang]」は lang 属性を持つすべての book ノードを選択することを意味します。

XPath 関数には、文字列関数、数学関数、論理関数、ノード関数、シーケンス関数などの関数が含まれており、これらの関数を使用して、ノードの選択、値の計算、データ型の変換、その他の操作を行うことができます。たとえば、「string-length(string)」関数は文字列の長さを返すことができ、「count(node-set)」関数はノード セット内のノードの数を返すことができます。

以下の例を使用して、XPath を使用してページを解析する方法を説明します。次の XML ファイルがあるとします。

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="zh">Learning XML</title>
      <price>39.95</price>
    </book>
</bookstore>

この XML ファイルでは、以下に示すように XPath 構文を使用してドキュメント内のノードを取得できます。

#パス式結果##/bookstoreSelectルート要素の書店。注: パスがスラッシュ ( / ) で始まる場合、このパスは常に要素への絶対パスを表します。 ドキュメント内の位置に関係なく、すべての book 子要素を選択します。 lang という名前の属性をすべて選択します。 bookstore の最初の子ノード book を選択します。
//book
//@lang
/bookstore/book[1]

CSS 选择器解析

通过HTML标签的属性和关系来定位元素的方式被称为CSS选择器。根据 HTML 标签的层级结构、类名、id 等属性能够确定元素的位置。在 Python 中,我们可以使用 BeautifulSoup 库来进行 CSS 选择器解析。

我们接下来会举一个例子,讲解如何运用 CSS 选择器来分析页面。假设我们有如下的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>这是页面标题</title>
</head>
<body>
	<div class="content">
		<h2 id="这是一级标题">这是一级标题</h2>
		<p>这是一段文本</p>
	</div>
	<div class="footer">
		<p>版权所有 © 2021</p>
	</div>
</body>
</html>

我们可以使用如下所示的 CSS 选择器语法来选取页面元素。

选择器 结果
div.content 选取 class 为 content 的 div 元素。
h2 选取所有的 h2 元素。
div.footer p 选取 class 为 footer 的 div 元素下的所有 p 元素。
[href] 选取所有具有 href 属性的元素。

正则表达式解析

用正则表达式可以解析 HTML 页面,从而实现文本的匹配、查找和替换。使用 re 模块可以进行 Python 的正则表达式解析。

下面我们通过一个例子来说明如何使用正则表达式对页面进行解析。假设我们有如下的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>这是页面标题</title>
</head>
<body>
	<div class="content">
		<h2 id="这是一级标题">这是一级标题</h2>
		<p>这是一段文本</p>
	</div>
	<div class="footer">
		<p>版权所有 © 2021</p>
	</div>
</body>
</html>

我们可以使用如下所示的正则表达式来选取页面元素。

import re
html = '''
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>这是页面标题</title>
</head>
<body>
	<div class="content">
		<h2 id="这是一级标题">这是一级标题</h2>
		<p>这是一段文本</p>
	</div>
	<div class="footer">
		<p>版权所有 © 2021</p>
	</div>
</body>
</html>
'''
pattern = re.compile(r'
.*?

(.*?)

.*?

(.*?)

.*?
', re.S) match = re.search(pattern, html) if match: title = match.group(1) text = match.group(2) print(title) print(text)

以上代码中,我们使用 re 模块的 compile 方法来编译正则表达式,然后使用 search 方法来匹配 HTML 代码。在正则表达式中,“.*?”表示非贪婪匹配,也就是匹配到第一个符合条件的标签就停止匹配,而“re.S”表示让“.”可以匹配包括换行符在内的任意字符。最后,我们使用 group 方法来获取匹配的结果。

以上がPython クローラーを使用して HTML ページを解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonと時間:勉強時間を最大限に活用するPythonと時間:勉強時間を最大限に活用するApr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール