(.*?)
.*?(.*?)
.*?通常、必要なデータを取得するには、Web クロールされたページを解析する必要があります。 HTMLタグの結合構造を解析することで、Webページに含まれる有益な情報を抽出することができます。 Python では、HTML を解析する一般的な方法が 3 つあります。それは、正規表現解析、XPath 解析、および CSS セレクタ解析です。
HTML 解析方法を説明する前に、HTML ページの基本構造を理解することが前提条件です。ブラウザで Web サイトを開き、マウスの右クリック メニューから [Web ページのソース コードの表示] メニュー項目を選択すると、Web ページに対応する HTML コードが表示されます。 HTML コードは通常、タグ、属性、テキストで構成されます。ラベルにはページに表示されるコンテンツが含まれ、属性はラベル情報を補足し、テキストはラベルによって表示されるコンテンツです。以下は、単純な HTML ページ コード構造の例です。
<!DOCTYPE html> <html> <head> <!-- head 标签中的内容不会在浏览器窗口中显示 --> <title>这是页面标题</title> </head> <body> <!-- body 标签中的内容会在浏览器窗口中显示 --> <h2>这是一级标题</h2> <p>这是一段文本</p> </body> </html>
この HTML ページ コード例では、8b05045a5be5764f313ed5b9168a17e6
はドキュメント タイプ宣言です。 タグはページ全体のルートタグであり、
93f0f5c25f18dab9d176bd4f6de5d30e と
6c04bd5ca3fcae76e30b72ad730ca86d は
100db36a723c770d327fc0aef2ce13b1## のサブタグです。 # タグを配置します。 6c04bd5ca3fcae76e30b72ad730ca86d
タグの下のコンテンツがブラウザ ウィンドウに表示されます。コンテンツのこの部分は Web ページの本体であり、< の下のコンテンツはブラウザ ウィンドウに表示されます。 ;head>
タグはブラウザ ウィンドウには表示されません。ブラウザ ウィンドウには表示されますが、通常 Web ページのヘッダーと呼ばれる、ページの重要なメタ情報が含まれています。 HTML ページの一般的なコード構造は次のとおりです。 <pre class="brush:php;toolbar:false"><!DOCTYPE html>
<html>
<head>
<!-- 页面的元信息,如字符编码、标题、关键字、媒体查询等 -->
</head>
<body>
<!-- 页面的主体,显示在浏览器窗口中的内容 -->
</body>
</html></pre>
タグ、カスケード スタイル シート (CSS)、および JavaScript は、HTML ページを構成する 3 つの基本コンポーネントです。タグはページに表示されるコンテンツを運ぶために使用され、CSS はページのレンダリングを担当し、JavaScript はページのインタラクティブな動作を制御するために使用されます。 HTML ページを解析するには、もともと XML のクエリ構文である XPath 構文を使用できます。HTML タグの階層構造に基づいて、コンテンツやタグ内のタグ属性を抽出できます。さらに、CSS セレクターを使用してページを見つけることもできます. 要素は、CSS を使用してページ要素をレンダリングするのと同じです。
XPath 解析
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 構文を使用してドキュメント内のノードを取得できます。
//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>这是一级标题</h2> <p>这是一段文本</p> </div> <div class="footer"> <p>版权所有 © 2021</p> </div> </body> </html> 我们可以使用如下所示的 CSS 选择器语法来选取页面元素。
正则表达式解析用正则表达式可以解析 HTML 页面,从而实现文本的匹配、查找和替换。使用 re 模块可以进行 Python 的正则表达式解析。 下面我们通过一个例子来说明如何使用正则表达式对页面进行解析。假设我们有如下的 HTML 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>这是页面标题</title> </head> <body> <div class="content"> <h2>这是一级标题</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>这是一级标题</h2> <p>这是一段文本</p> </div> <div class="footer"> <p>版权所有 © 2021</p> </div> </body> </html> ''' pattern = re.compile(r' 以上代码中,我们使用 re 模块的 compile 方法来编译正则表达式,然后使用 search 方法来匹配 HTML 代码。在正则表达式中,“.*?”表示非贪婪匹配,也就是匹配到第一个符合条件的标签就停止匹配,而“re.S”表示让“.”可以匹配包括换行符在内的任意字符。最后,我们使用 group 方法来获取匹配的结果。 |
以上がPython クローラーを使用して HTML ページを解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。