欢迎访问宙启技术站
智能推送

使用PyQuery和正则表达式进行网页匹配和筛选

发布时间:2024-01-18 07:22:33

PyQuery是一个基于jQuery的Python库,用于解析和处理HTML和XML文档。它提供了类似于jQuery的语法和方法,使我们能够使用CSS选择器和正则表达式来从网页中筛选和提取所需的数据。

首先,我们需要安装PyQuery库。可以使用pip命令进行安装:

pip install pyquery

接下来,我们将使用PyQuery和正则表达式来从一个简单的HTML文档中筛选和提取数据。

假设我们有一个名为"example.html"的HTML文件,内容如下:

<html>
<body>
    <h1>网页标题</h1>
    <div class="content">
        <p>这是一段文字。</p>
        <p>这是另一段文字。</p>
        <p>这是第三段文字。</p>
    </div>
    <div class="info">
        <p>作者:John Doe</p>
        <p>发布日期:2021-01-01</p>
    </div>
    <ul>
        <li>列表项1</li>
        <li>列表项2</li>
        <li>列表项3</li>
    </ul>
</body>
</html>

接下来,我们将使用PyQuery和正则表达式从该HTML文档中筛选和提取数据。首先,我们需要导入所需的模块:

from pyquery import PyQuery as pq
import re

然后,我们可以使用pq函数加载HTML文档:

html = pq(filename='example.html')

接下来,我们可以使用CSS选择器来选择和匹配特定的元素。例如,我们可以使用'h1'选择器来选择<h1>元素:

title = html('h1')
print(title.text())
# 输出:网页标题

我们还可以使用'.content p'选择器来选择所有具有class属性为'content'<div>元素下的所有<p>元素:

paragraphs = html('.content p')
for p in paragraphs:
    print(p.text)
# 输出:
# 这是一段文字。
# 这是另一段文字。
# 这是第三段文字。

此外,我们还可以使用正则表达式来进一步筛选和提取数据。例如,我们可以使用re库中的search方法来查找所有以"John"开头的作者信息:

author = html('.info p').filter(lambda i, el: re.search(r'^作者:John', pq(el).text()))
print(author.text())
# 输出:作者:John Doe

我们还可以使用正则表达式来提取日期信息中的年份。例如,我们可以使用re库中的findall方法来查找所有具有日期格式的字符串,并提取其中的年份:

dates = html('.info p').filter(lambda i, el: re.search(r'^发布日期', pq(el).text()))
years = [re.findall(r'\d{4}', pq(date).text())[0] for date in dates]
print(years)
# 输出:['2021']

最后,我们可以使用CSS选择器和正则表达式的组合来选择和提取列表项。例如,我们可以使用'ul li'选择器来选择所有<ul>元素下的<li>元素,并使用正则表达式来提取其中的文本:

items = html('ul li').items()
for item in items:
    match = re.search(r'列表项(\d+)', item.text())
    if match:
        print(match.group(1))
# 输出:
# 1
# 2
# 3

以上是使用PyQuery和正则表达式进行网页匹配和筛选的简单示例。通过使用PyQuery的CSS选择器和正则表达式,我们可以从HTML文档中轻松地提取所需的数据。