【问题标题】:Finding a <div> block with an 'id' and 'class' using Nokogiri使用 Nokogiri 查找具有 'id' 和 'class' 的 <div> 块
【发布时间】:2017-05-22 23:24:48
【问题描述】:

如何使用 Nokogiri 搜索以下块:

<div id="live_list_cat_16" class="football-block sport-block" style="display:block;">
</div>

【问题讨论】:

标签: html ruby web-scraping nokogiri


【解决方案1】:

试试这个

doc.search('div#foo.bar')

这是如何工作的?

  • searchat 方法都接受 CSS 查询
  • div#foo 找到一个 id 为 foo 的 div
  • div.bar 找到一个类为 bar 的 div

【讨论】:

  • 我已经尝试过了,但它不起作用。出于某种原因,当我搜索页面时,它似乎没有看到任何通过一定“深度”的内部块。 Here is a snip of the HTML。如果我搜索上面的任何类并且最多 .in-play-odds,它会返回它。但是,它找不到.in-play-odds 的任何子类,如果我搜索.in-play-odds,它只会返回一个空块作为&lt;div id="live_list_container" class="in-play-odds"&gt; &lt;/div&gt;。任何想法为什么它不能在这个块内搜索?
  • 也许这些div 元素是在页面加载后用javascript 动态创建的。您是否检查过它们是否存在于您提供给 nokogiri 的 html 字符串中?
  • 我认为动态添加它们可能是正确的。如果是这样的话,有没有办法用 Nokogiri 刮掉它们?
  • 也许,也许不是。可能有一个 API 调用以 JSON 或 HTML 格式获取数据,请检查开发工具中的网络选项卡...
【解决方案2】:

您可以使用#some_id 作为 CSS 选择器。

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<html>
  <body>
    <div id="foo" class="bar">text</div>
    <div id="foo2" class="bar">more_text</div>
  </body>
</html>
EOT

doc.search('#foo').to_html # => "<div id=\"foo\" class=\"bar\">text</div>"
doc.search('div.bar').to_html # => "<div id=\"foo\" class=\"bar\">text</div><div id=\"foo2\" class=\"bar\">more_text</div>"

请记住,特定 ID 在文档中只允许存在一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2014-09-08
    • 2013-11-27
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多