(.*?)
.*?(.*?)
.*?Normalerweise müssen wir im Internet gecrawlte Seiten analysieren, um die benötigten Daten zu erhalten. Durch die Analyse der kombinierten Struktur von HTML-Tags können wir nützliche Informationen aus Webseiten extrahieren. In Python gibt es drei gängige Methoden zum Parsen von HTML: Parsen regulärer Ausdrücke, XPath-Parsen und CSS-Selektor-Parsen.
Das Verständnis der Grundstruktur einer HTML-Seite ist eine Voraussetzung, bevor die HTML-Parsing-Methode erklärt wird. Wenn wir eine Website in einem Browser öffnen und über das Rechtsklickmenü der Maus den Menüpunkt „Quellcode der Webseite anzeigen“ auswählen, können wir den HTML-Code sehen, der der Webseite entspricht. HTML-Code besteht normalerweise aus Tags, Attributen und Text. Das Etikett trägt den auf der Seite angezeigten Inhalt, die Attribute ergänzen die Etiketteninformationen und der Text ist der vom Etikett angezeigte Inhalt. Das Folgende ist ein einfaches Beispiel für die Struktur eines HTML-Seitencodes:
<!DOCTYPE html> <html> <head> <!-- head 标签中的内容不会在浏览器窗口中显示 --> <title>这是页面标题</title> </head> <body> <!-- body 标签中的内容会在浏览器窗口中显示 --> <h2>这是一级标题</h2> <p>这是一段文本</p> </body> </html>
In diesem HTML-Seitencodebeispiel wird der Inhalt unter dem Tag <!DOCTYPE html>
是文档类型声明,<html>
标签是整个页面的根标签,<head>
和<body>
是<html>
标签的子标签,放在<body>
标签下的内容会显示在浏览器窗口中,这部分内容是网页的主体;放在<head>
nicht im Browserfenster angezeigt, enthält jedoch wichtige Metainformationen der Seite, die normalerweise als The bezeichnet werden Kopfzeile der Webseite. Die allgemeine Codestruktur einer HTML-Seite ist wie folgt:
<!DOCTYPE html> <html> <head> <!-- 页面的元信息,如字符编码、标题、关键字、媒体查询等 --> </head> <body> <!-- 页面的主体,显示在浏览器窗口中的内容 --> </body> </html>
Tags, Cascading Style Sheets (CSS) und JavaScript sind die drei Grundkomponenten, aus denen eine HTML-Seite besteht. Tags werden verwendet, um den auf der Seite anzuzeigenden Inhalt zu transportieren, CSS ist für die Darstellung der Seite verantwortlich und JavaScript wird verwendet, um das interaktive Verhalten der Seite zu steuern. Zum Parsen von HTML-Seiten können Sie die XPath-Syntax verwenden, die ursprünglich eine Abfragesyntax für XML ist. Sie kann Inhalte oder Tag-Attribute in Tags basierend auf der hierarchischen Struktur von HTML-Tags extrahieren. Darüber hinaus können Sie auch CSS-Selektoren verwenden, um Seiten zu finden . Elemente sind die gleichen wie beim Rendern von Seitenelementen mit CSS.
XPath ist eine Syntax zum Suchen von Informationen in XML-Dokumenten (eXtensible Markup Language). XML ist eine Tag-Sprache, die Tags zum Übertragen von Daten verwendet angepasst werden, und XML hat strengere Syntaxanforderungen. XPath verwendet Pfadausdrücke, um Knoten oder Knotensätze in XML-Dokumenten auszuwählen. Zu den hier genannten Knoten gehören Elemente, Attribute, Text, Namespaces, Verarbeitungsanweisungen, Kommentare, Stammknoten usw.
Der XPath-Pfadausdruck ähnelt der Dateipfadsyntax. Sie können „/“ und „//“ verwenden, um Knoten auszuwählen. Bei der Auswahl des Wurzelknotens können Sie einen einzelnen Schrägstrich „/“ verwenden; bei der Auswahl eines Knotens an einer beliebigen Position können Sie einen doppelten Schrägstrich „//“ verwenden. Beispielsweise bedeutet „/bookstore/book“, dass alle Buchunterknoten unter dem Stammknoten „bookstore“ ausgewählt werden, und „//title“, dass der Titelknoten an einer beliebigen Position ausgewählt wird.
XPath kann auch Prädikat zum Filtern von Knoten verwenden. Verschachtelte Ausdrücke in eckigen Klammern können Zahlen, Vergleichsoperatoren oder Funktionsaufrufe sein, die als Prädikate dienen. Beispielsweise bedeutet „/bookstore/book[1]“ die Auswahl des ersten untergeordneten Knotens „book“ von „bookstore“ und „//book[@lang]“ bedeutet die Auswahl aller Buchknoten mit dem lang-Attribut.
XPath-Funktionen umfassen Zeichenfolgen-, mathematische, logische, Knoten-, Sequenz- und andere Funktionen. Diese Funktionen können zum Auswählen von Knoten, zum Berechnen von Werten, zum Konvertieren von Datentypen und für andere Operationen verwendet werden. Beispielsweise kann die Funktion „string-length(string)“ die Länge der Zeichenfolge zurückgeben, und die Funktion „count(node-set)“ kann die Anzahl der Knoten im Knotensatz zurückgeben.
Im Folgenden veranschaulichen wir anhand eines Beispiels, wie XPath zum Parsen der Seite verwendet wird. Angenommen, wir haben die folgende XML-Datei:
<?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>
Für diese XML-Datei können wir die XPath-Syntax wie unten gezeigt verwenden, um die Knoten im Dokument abzurufen.
Pfadausdruck | Ergebnis |
---|---|
/Buchhandlung | Wählen Sie das Stammelement Buchhandlung aus. Hinweis: Wenn der Pfad mit einem Schrägstrich ( / ) beginnt, stellt dieser Pfad immer einen absoluten Pfad zu einem Element dar! |
//book | Wählt alle untergeordneten Buchelemente unabhängig von ihrer Position im Dokument aus. |
//@lang | Wählen Sie alle Attribute mit dem Namen lang aus. |
/bookstore/book[1] | Wählen Sie den ersten untergeordneten Knoten „Book“ des Buchladens aus. |
通过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 选择器语法来选取页面元素。
选择器 | 结果 |
---|---|
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>这是一级标题</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.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 方法来获取匹配的结果。
Das obige ist der detaillierte Inhalt vonSo analysieren Sie HTML-Seiten mit dem Python-Crawler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!