xpath/css href 未打印
xpath/css href not printing
我正在尝试打印 html 文档的 href,但是我做不到。
newurl = 'http://www.heroesfire.com/hots/guide/the-many-ways-of-abathur-1194'
buildpage = Nokogiri::HTML(open(newurl))
#puts buildpage
thistext = buildpage.css("div#wrap div#site-content.self-clear div#guide.view-guide div.col-l div.tab-contents.box div.guide-tab div.chapter-text div.text table.bbcode_columns tbody tr td.bbcode_column a").each do |href|
puts href['href']
end
我期待看到“/hots/wiki/talents/pressurized-glands”
我能够在我的脚本中获得类似于工作的东西,但我对此的运气为零。
不变的是,节点选择器越长,它正常工作的可能性就越小,尤其是当您处理无法控制的 HTML 时。
减少它以找到 way-points 可以帮助您向下钻取而不是试图定义每个步骤的地方。
您还依赖于选择器中的 tbody
。当我们看到它时,很有可能它不在原始 HTML 源代码中,而是由您的浏览器注入的。选择器喜欢使用浏览器和检查器在页面中定位特定项目的味道,但如果 HTML 实际上不包含 tbody
,则生成的路径将不起作用。浏览器做了很多 fix-up 来尝试展示一些有用的东西,包括添加标签。所以当你看到 tbody
并确认它确实存在时要小心。在您的情况下,确实如此,但在浏览文档时问题仍然存在。
简化路径的一个简单例子是:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<div id="foo">
<div id="bar">
<p>text1</p>
</div>
<div id="baz">
<p>text2</p>
</div>
</div>
</body>
</html>
EOT
doc.at('body div#foo div#bar p').text # => "text1"
可以更容易地编写,同时仍然完成同样的事情,使用:
doc.at('#bar p').text # => "text1"
或者其中之一:
doc.at('#foo div p').text # => "text1"
doc.search('#foo div p').first.text # => "text1"
所有抓取至少需要对目标页面的结构有一些预先了解,因此,当您四处寻找时,请注意重要的布局标签。 id
参数特别有用,后面跟着 class
and/or 独特的标签模式,未在文档的其他地方复制。这些使得减少选择器变得容易。有时我们必须像我在定位特定节点后使用 first
或 "sibling" 方法之一那样逐步进入文档,但很少需要使用长选择器。
我正在尝试打印 html 文档的 href,但是我做不到。
newurl = 'http://www.heroesfire.com/hots/guide/the-many-ways-of-abathur-1194'
buildpage = Nokogiri::HTML(open(newurl))
#puts buildpage
thistext = buildpage.css("div#wrap div#site-content.self-clear div#guide.view-guide div.col-l div.tab-contents.box div.guide-tab div.chapter-text div.text table.bbcode_columns tbody tr td.bbcode_column a").each do |href|
puts href['href']
end
我期待看到“/hots/wiki/talents/pressurized-glands”
我能够在我的脚本中获得类似于工作的东西,但我对此的运气为零。
不变的是,节点选择器越长,它正常工作的可能性就越小,尤其是当您处理无法控制的 HTML 时。
减少它以找到 way-points 可以帮助您向下钻取而不是试图定义每个步骤的地方。
您还依赖于选择器中的 tbody
。当我们看到它时,很有可能它不在原始 HTML 源代码中,而是由您的浏览器注入的。选择器喜欢使用浏览器和检查器在页面中定位特定项目的味道,但如果 HTML 实际上不包含 tbody
,则生成的路径将不起作用。浏览器做了很多 fix-up 来尝试展示一些有用的东西,包括添加标签。所以当你看到 tbody
并确认它确实存在时要小心。在您的情况下,确实如此,但在浏览文档时问题仍然存在。
简化路径的一个简单例子是:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<div id="foo">
<div id="bar">
<p>text1</p>
</div>
<div id="baz">
<p>text2</p>
</div>
</div>
</body>
</html>
EOT
doc.at('body div#foo div#bar p').text # => "text1"
可以更容易地编写,同时仍然完成同样的事情,使用:
doc.at('#bar p').text # => "text1"
或者其中之一:
doc.at('#foo div p').text # => "text1"
doc.search('#foo div p').first.text # => "text1"
所有抓取至少需要对目标页面的结构有一些预先了解,因此,当您四处寻找时,请注意重要的布局标签。 id
参数特别有用,后面跟着 class
and/or 独特的标签模式,未在文档的其他地方复制。这些使得减少选择器变得容易。有时我们必须像我在定位特定节点后使用 first
或 "sibling" 方法之一那样逐步进入文档,但很少需要使用长选择器。