📜  Python|使用 lxml 从 HTML 中提取 URL(1)

📅  最后修改于: 2023-12-03 14:46:25.798000             🧑  作者: Mango

Python:使用 lxml 从 HTML 中提取 URL

如果你需要从网页中提取 URL,Python 提供了多种方法。本文将介绍如何使用 lxml 库从 HTML 中提取 URL,以及给出一些实际的例子。

简介

lxml 是一个 Python 库,用于处理 XML 和 HTML 数据。它是 Python 中最流行的解析库之一,具有高性能和易用性。

在这里,我们将使用 lxml 从 HTML 中提取 URL,利用其提供的 XPath 和 CSS 选择器。

安装

安装 lxml 库有多种方式,其中最容易的是使用 pip 进行安装:

pip install lxml
从 HTML 中提取 URL

让我们看一下如何使用 lxml 从 HTML 中提取 URL。我们将使用 html 模块创建一个 HTML 文档,并在其中添加一些链接:

from lxml import html

doc = html.fromstring("""
<html>
    <head>
        <title>My Webpage</title>
    </head>
    <body>
        <h1>Welcome to my webpage</h1>
        <p>Click on one of the links below:</p>
        <ul>
            <li><a href="https://www.python.org">Python</a></li>
            <li><a href="https://www.google.com">Google</a></li>
            <li><a href="https://www.github.com">GitHub</a></li>
        </ul>
    </body>
</html>
""")

到目前为止,我们已经加载了 HTML 文档。现在,我们可以使用 XPath 或 CSS 选择器从中提取 URL。

使用 XPath

使用 XPath,我们可以轻松地从 HTML 文档中提取 URL。例如,如果我们想从上面的 HTML 文档中提取第一个 URL,可以使用以下代码:

url = doc.xpath('//a/@href')[0]
print(url)

输出:

https://www.python.org

在这里,我们使用 //a/@href XPath 表达式来选择文档中所有 a 元素的 href 属性。// 符号表示选择任意深度的元素。

使用 CSS 选择器

我们也可以使用 CSS 选择器来提取 URL。例如,以下代码将提取所有链接的 URL:

urls = doc.cssselect('a[href]')
for u in urls:
    print(u.get('href'))

运行代码后,将输出:

https://www.python.org
https://www.google.com
https://www.github.com

在这里,我们使用 a[href] CSS 选择器来选择文档中具有 href 属性的所有 a 元素。

示例

以下是一个完整的示例,它从 HTML 中提取所有链接的 URL:

from lxml import html

doc = html.fromstring("""
<html>
    <head>
        <title>My Webpage</title>
    </head>
    <body>
        <h1>Welcome to my webpage</h1>
        <p>Click on one of the links below:</p>
        <ul>
            <li><a href="https://www.python.org">Python</a></li>
            <li><a href="https://www.google.com">Google</a></li>
            <li><a href="https://www.github.com">GitHub</a></li>
        </ul>
    </body>
</html>
""")

# 使用 CSS 选择器提取所有链接的 URL
urls = doc.cssselect('a[href]')
for u in urls:
    print(u.get('href'))

输出:

https://www.python.org
https://www.google.com
https://www.github.com
总结

使用 lxml 库,我们可以轻松地从 HTML 中提取 URL。无论你是想编写一个爬虫,还是只是需要在 Python 中操作 HTML,lxml 都是一个非常有用的库。尝试使用它来解析和提取 HTML 数据,看看它能为你带来什么好处。