flash网站建设技术...,小说网站模板建站,樱花动漫imomoe官网入口,自己做软件的应用用 Python 解析 HTML 页面
在网络爬取的过程中#xff0c;我们通常需要对所爬取的页面进行解析#xff0c;从中提取我们需要的数据。网页的结构通常是由 HTML 标签所组成的#xff0c;通过对这些标签的解析#xff0c;可以得到网页中所包含的有用信息。在 Python 中#…用 Python 解析 HTML 页面
在网络爬取的过程中我们通常需要对所爬取的页面进行解析从中提取我们需要的数据。网页的结构通常是由 HTML 标签所组成的通过对这些标签的解析可以得到网页中所包含的有用信息。在 Python 中有三种常见的 HTML 解析方式正则表达式解析、XPath 解析和 CSS 选择器解析。本文将为大家介绍这三种解析方式的基本使用方法。
HTML 页面的结构
在讲解 HTML 解析方式之前我们需要先了解一下 HTML 页面的基本结构。当我们在浏览器中打开一个网站并通过鼠标右键菜单选择“显示网页源代码”菜单项时就可以看到网页对应的 HTML 代码。HTML 代码通常由标签、属性和文本组成。标签用于承载页面要显示的内容属性用于补充标签的信息而文本则是标签所显示的内容。下面是一个简单的 HTML 页面代码结构示例
!DOCTYPE html
htmlhead!-- head 标签中的内容不会在浏览器窗口中显示 --title这是页面标题/title/headbody!-- body 标签中的内容会在浏览器窗口中显示 --h1这是一级标题/h1p这是一段文本/p/body
/html
在这个 HTML 页面代码示例中!DOCTYPE html是文档类型声明html标签是整个页面的根标签head和body是html标签的子标签放在body标签下的内容会显示在浏览器窗口中这部分内容是网页的主体放在head标签下的内容不会在浏览器窗口中显示但是却包含了页面重要的元信息通常称之为网页的头部。HTML 页面大致的代码结构如下所示
!DOCTYPE html
htmlhead!-- 页面的元信息如字符编码、标题、关键字、媒体查询等 --/headbody!-- 页面的主体显示在浏览器窗口中的内容 --/body
/html
在 HTML 页面中标签、层叠样式表CSS和 JavaScript 是构成页面的三要素。标签用来承载页面要显示的内容CSS 负责对页面的渲染而 JavaScript 用来控制页面的交互式行为。要实现 HTML 页面的解析可以使用 XPath 的语法它原本是 XML 的一种查询语法可以根据 HTML 标签的层次结构提取标签中的内容或标签属性此外也可以使用 CSS 选择器来定位页面元素就跟用 CSS 渲染页面元素是同样的道理。
XPath 解析
XPath 是在 XMLeXtensible Markup Language文档中查找信息的一种语法XML 跟 HTML 类似也是一种用标签承载数据的标签语言不同之处在于 XML 的标签是可扩展的可以自定义的而且 XML 对语法有更严格的要求。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集这里所说的节点包括元素、属性、文本、命名空间、处理指令、注释、根节点等。
XPath 的路径表达式是一种类似于文件路径的语法可以通过“/”和“//”来选取节点。单斜杠“/”表示选取根节点双斜杠“//”表示选取任意位置的节点。例如“/bookstore/book”表示选取根节点 bookstore 下的所有 book 子节点“//title”表示选取任意位置的 title 节点。
XPath 还可以使用谓语Predicate来过滤节点。谓语是被嵌在方括号中的表达式它可以是一个数字、一个比较运算符或一个函数调用。例如“/bookstore/book[1]”表示选取 bookstore 的第一个子节点 book“//book[lang]”表示选取所有具有 lang 属性的 book 节点。
XPath 的函数包括字符串、数学、逻辑、节点、序列等函数这些函数可以用于选取节点、计算值、转换数据类型等操作。例如“string-length(string)”函数可以返回字符串的长度“count(node-set)”函数可以返回节点集中节点的个数。
下面我们通过一个例子来说明如何使用 XPath 对页面进行解析。假设我们有如下的 XML 文件
?xml version1.0 encodingUTF-8?
bookstorebooktitle langengHarry Potter/titleprice29.99/price/bookbooktitle langzhLearning XML/titleprice39.95/price/book
/bookstore
对于这个 XML 文件我们可以用如下所示的 XPath 语法获取文档中的节点。
路径表达式结果/bookstore选取根元素 bookstore。注意假如路径起始于正斜杠( / )则此路径始终代表到某元素的绝对路径//book选取所有 book 子元素而不管它们在文档中的位置。//lang选取名为 lang 的所有属性。/bookstore/book[1]选取 bookstore 的第一个子节点 book。
CSS 选择器解析
CSS 选择器是一种基于 HTML 标签的属性和关系来定位元素的方法。它可以根据 HTML 标签的层次结构、类名、id 等属性来定位元素。在 Python 中我们可以使用 BeautifulSoup 库来进行 CSS 选择器解析。
下面我们通过一个例子来说明如何使用 CSS 选择器对页面进行解析。假设我们有如下的 HTML 代码
!DOCTYPE html
html
headmeta charsetutf-8title这是页面标题/title
/head
bodydiv classcontenth1这是一级标题/h1p这是一段文本/p/divdiv classfooterp版权所有 © 2021/p/div
/body
/html
我们可以使用如下所示的 CSS 选择器语法来选取页面元素。
选择器结果div.content选取 class 为 content 的 div 元素。h1选取所有的 h1 元素。div.footer p选取 class 为 footer 的 div 元素下的所有 p 元素。[href]选取所有具有 href 属性的元素。
正则表达式解析
正则表达式是一种用来匹配、查找和替换文本的工具它可以用于对 HTML 页面进行解析。在 Python 中我们可以使用 re 模块来进行正则表达式解析。
下面我们通过一个例子来说明如何使用正则表达式对页面进行解析。假设我们有如下的 HTML 代码
!DOCTYPE html
html
headmeta charsetutf-8title这是页面标题/title
/head
bodydiv classcontenth1这是一级标题/h1p这是一段文本/p/divdiv classfooterp版权所有 © 2021/p/div
/body
/html
我们可以使用如下所示的正则表达式来选取页面元素。
import rehtml
!DOCTYPE html
html
headmeta charsetutf-8title这是页面标题/title
/head
bodydiv classcontenth1这是一级标题/h1p这是一段文本/p/divdiv classfooterp版权所有 © 2021/p/div
/body
/html
pattern re.compile(rdiv classcontent.*?h1(.*?)/h1.*?p(.*?)/p.*?/div, 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 解析方式XPath 解析、CSS 选择器解析和正则表达式解析。在具体的应用过程中我们可以根据需要选择不同的解析方式。XPath 解析适用于对 HTML 页面的层次结构进行解析能够比较方便地定位页面元素CSS 选择器解析适用于对 HTML 页面的类名、id 等属性进行解析可以快速定位元素正则表达式解析适用于对 HTML 页面的标签和文本进行解析可以灵活地处理页面元素。希望本文能够对大家进行 HTML 解析方面的学习和实践有所帮助。