使用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文档中轻松地提取所需的数据。
