Ruby 如何在<;之后提取文本;br>;使用机械化
我想在第一个Ruby 如何在<;之后提取文本;br>;使用机械化,ruby,mechanize,Ruby,Mechanize,我想在第一个(状态)之后提取文本 HTML代码是: <div class="location"> Country <br> State <br> City </div> 有什么想法吗 这很简单,但您必须了解文档是如何在DOM中的Nokogiri中表示的 有标记(为元素节点)和中间文本(为文本节点): require 'nokogiri' doc = Nokogiri::HTML(<<EOT)
(状态)之后提取文本
HTML代码是:
<div class="location">
Country
<br>
State
<br>
City
</div>
有什么想法吗 这很简单,但您必须了解文档是如何在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"
和以下文本节点:
doc.at('.location br').next_sibling.class # => Nokogiri::XML::Text
以及如何访问文本节点的内容:
doc.at('.location br').next_sibling.text # => "\n State\n "
再次查看
标记及其下一个同级节点:
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">
我不能这样做
doc.at('.location br').next\u sibling.text
或doc.at('.location br').next\u sibling.text
第一个断言是正确的,您不能使用'。位置br'
,因为您不能在
中嵌套标记,所以在为HTML编写CSS选择器时,br
毫无意义
第二种说法是错误的。您可以使用next\u sibling.next\u 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>"
所以,你只是走得不够远:
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"]
这很简单,但您必须理解文档是如何在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"
和以下文本节点:
doc.at('.location br').next_sibling.class # => Nokogiri::XML::Text
以及如何访问文本节点的内容:
doc.at('.location br').next_sibling.text # => "\n State\n "
再次查看
标记及其下一个同级节点:
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">
我不能这样做
doc.at('.location br').next\u sibling.text
或doc.at('.location br').next\u sibling.text
第一个断言是正确的,您不能使用'。位置br'
,因为您不能在
中嵌套标记,所以在为HTML编写CSS选择器时,br
毫无意义
第二种说法是错误的。您可以使用next\u sibling.next\u 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>"
所以,你只是走得不够远:
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"]
试试下面的
a = Mechanize.new
page = a.get(url)
state = page.search(".kiwii-no-link-color").children[2].text
puts state
试试下面的
a = Mechanize.new
page = a.get(url)
state = page.search(".kiwii-no-link-color").children[2].text
puts state
你能给我一个站点url吗?你能给我一个站点url吗?它是有效的,但例如,如果我想选择一个城市,我就不能这样做
doc.at('.location br')。next齌sibling.text
或doc.at('.location br')。next齌sibling.text
@Rubyx你想放弃哪个站点url?@Santosh url是<代码>类是.kiwii没有链接颜色@Rubyx让你检查答案吗?它是有效的,但例如,如果我想选择城市,我不能像这样doc.at('.location br')。next_sibling.text
或doc.at('.location br')。next_sibling.text
@Rubyx你想放弃哪个网站url?@Santosh url是<代码>类为。kiwii无链接颜色@Rubyx你检查答案了吗?