gpt4 book ai didi

ruby - 如何在
之后使用 Mechanize 提取文本

转载 作者:行者123 更新时间:2023-12-04 16:19:44 27 4
gpt4 key购买 nike

我想在第一个 <br> 之后提取文本(状态)。

HTML代码是:

<div class="location">
Country
<br>
State
<br>
City
</div>

目前我可以提取所有 <div>文本与:
a = Mechanize.new
page = a.get(url)
state = page.at('.location').text
puts state

有任何想法吗?

最佳答案

这很容易,但您必须了解文档在 DOM 中的 Nokogiri 中是如何表示的。

有标签,它们是元素节点,以及中间的文本,它们是文本节点:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div class="location">
Country
<br>
State
<br>
City
</div>
EOT

doc.at('.location br').next_sibling.text.strip # => "State"

这是 Nokogiri 所说的 <br>是:
doc.at('.location br').class # => Nokogiri::XML::Element

以及以下文本节点:
doc.at('.location br').next_sibling.class # => Nokogiri::XML::Text

以及我们如何访问文本节点的内容:
doc.at('.location br').next_sibling.text # => "\n    State\n    "

再一次,看着 <div>标签及其下一个兄弟节点:
doc.at('.location').class # => Nokogiri::XML::Element
doc.at('.location').next_sibling.class # => Nokogiri::XML::Text
doc.at('.location').next_sibling # => #<Nokogiri::XML::Text:0x3fcf58489c7c "\n">

顺便说一下,您可以访问 Mechanize 的 Nokogiri 解析器以使用以下内容来处理 DOM:
require 'mechanize'

agent = Mechanize.new
page = agent.get('http://example.com')
doc = page.parser

doc.class # => Nokogiri::HTML::Document
doc.title # => "Example Domain"

I can't do like this doc.at('.location br br').next_sibling.text or doc.at('.location br').next_sibling.next_sibling.text



第一个断言是正确的,不能用 '.location br br'因为你不能在 <br> 中嵌套标签, 所以 br br为 HTML 编写 CSS 选择器是无稽之谈。

第二个说法是错误的。您可以使用 next_sibling.next_sibling但是你必须注意 DOM 中的标签。在您的 HTML 示例中,它不会返回任何合理的内容:
doc.at('.location br').to_html # => "<br>"
doc.at('.location br').next_sibling.to_html # => "\n State\n "
doc.at('.location br').next_sibling.next_sibling.to_html # => "<br>"

并获得 text<br>将返回一个空字符串,因为 <br>无法换行文本:
doc.at('br').text # => ""

所以,你只是做得还不够:
doc.at('.location br').next_sibling.next_sibling.next_sibling.text.strip # => "City"

但是,如果这是这个 DOM 的意图,我会更简单地做:
break_text = doc.search('.location br').map{ |br| br.next_sibling.text.strip }
# => ["State", "City"]

关于ruby - 如何在 <br> 之后使用 Mechanize 提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com