Nokogiri 和 XPath 帮助

作者:编程家 分类: xml 时间:2025-07-24

Nokogiri和XPath是两个强大的工具,可以帮助我们在网页中提取和解析数据。本文将介绍如何使用Nokogiri和XPath进行网页数据提取,并给出相关的案例代码。

首先,我们需要安装Nokogiri库。可以使用以下命令来安装Nokogiri:

gem install nokogiri

安装完成后,我们可以使用以下代码来解析HTML页面并提取数据:

ruby

require 'nokogiri'

require 'open-uri'

# 打开网页并将其加载到Nokogiri中

doc = Nokogiri::HTML(open('http://example.com'))

# 使用XPath选择器提取数据

title = doc.xpath('//h1').text

paragraphs = doc.xpath('//p').map(&:text)

# 输出结果

puts "标题: #{title}"

puts "段落: #{paragraphs}"

上述代码中,我们首先导入了`nokogiri`和`open-uri`库。然后,我们使用`open-uri`库中的`open`方法打开一个网页,并将其加载到Nokogiri中。接下来,我们使用`xpath`方法选择器来提取网页中的标题和段落。最后,我们将结果输出到控制台。

接下来,让我们来看一个实际的案例。假设我们要从一个电商网站中提取商品的名称和价格信息。

ruby

require 'nokogiri'

require 'open-uri'

# 打开网页并将其加载到Nokogiri中

doc = Nokogiri::HTML(open('http://example.com/products'))

# 使用XPath选择器提取商品信息

products = doc.xpath('//div[@class="product"]')

# 遍历每个商品,并提取名称和价格

products.each do |product|

name = product.xpath('.//h2').text

price = product.xpath('.//span[@class="price"]').text

# 输出结果

puts "商品名称: #{name}"

puts "价格: #{price}"

puts "-------------------"

end

在上述代码中,我们使用了一个XPath选择器来选择具有`class`属性为`product`的`div`元素,这表示每个商品的外部容器。然后,我们在每个商品容器内使用XPath选择器来提取商品名称和价格。最后,我们将结果输出到控制台。

在文章的中间段落中,我们可以添加一些标题来更好地组织内容。为了给标题添加``标签,我们可以使用Nokogiri的`Builder`类来构建一个新的HTML文档,并在需要添加标题的地方使用`strong`方法来创建``标签。

ruby

require 'nokogiri'

# 创建一个新的HTML文档

builder = Nokogiri::HTML::Builder.new do |doc|

doc.html {

doc.body {

doc.p {

doc.text "这是一个普通的段落。"

}

doc.p {

doc.strong {

doc.text "这是一个带有标签的标题。"

}

}

doc.p {

doc.text "这是另一个普通的段落。"

}

}

}

end

# 输出HTML文档

puts builder.to_html

上述代码中,我们使用Nokogiri的`Builder`类来创建一个新的HTML文档。在需要添加标题的地方,我们使用`strong`方法创建了一个``标签,并在其中添加了文本内容。最后,我们使用`to_html`方法将文档转换为HTML字符串,并将其输出到控制台。

通过使用Nokogiri和XPath,我们可以方便地提取和解析网页中的数据,并根据需要添加标题和其他标签来组织内容。无论是简单的数据提取还是复杂的网页解析,Nokogiri和XPath都能够帮助我们轻松完成任务。