ruby
  • nokogiri
  • 2010-08-09 88 views 4 likes 
    4

    我无法弄清楚为什么我无法通过nokogiri正确解析关键字。在以下示例中,我的href链接文本功能正常工作,但无法弄清楚如何拉取关键字。Nokogiri html解析问题

    这是代码我迄今:

    .....

    doc = Nokogiri::HTML(open("http://www.cnn.com")) 
    doc.xpath('//a/@href').each do |node| 
    #doc.xpath("//meta[@name='Keywords']").each do |node| 
    
    puts node.text 
    

    ....

    这使得成功在所有页面中的A HREF文字,但是当我尝试将它用于关键字时,它不显示任何内容。我已经尝试了几次这样的变化,但没有运气。我假设节点后的“.text”标注是错误的,但我不确定。

    我很抱歉这段代码很粗糙,我正尽我最大努力在这里学习。

    +0

    请阅读“[mcve]”。证明问题的最小输入是多少?不要要求我们创造我们自己的。你必须帮助我们帮助你。通过这样做,你可以帮助那些在未来寻找类似解决方案的人,这就是Stack Overflow的原因。 – 2016-09-14 00:54:01

    回答

    6

    你是对的,问题是texttext返回开始标记和结束标记之间的文本。由于元标签为空,因此会为您提供空字符串。您需要改为“content”属性的值。

    doc.xpath("//meta[@name='Keywords']/@content").each do |attr| 
        puts attr.value 
    end 
    

    既然你知道,有将只有一个meta标记名称为“关键字”,你实际上并不需要通过循环的结果,但可直接采取的第一项是这样的:

    puts doc.xpath("//meta[@name='Keywords']/@content").first.value 
    

    但是,请注意,如果没有名称为“content”的元标记,则会导致错误,因此第一个选项可能更可取。

    +0

    谢谢!我一直在寻找相当长的一段时间,看看在哪里可以找到这些定义。你能告诉我我应该看的文件吗? – paradoxic 2010-08-09 16:58:37

    +1

    在研究这样的问题时,我几乎总是以irb身份。这可以让你探索你找回的值,找出你需要做什么调用或者你需要查询哪些属性。 – 2010-08-09 17:04:52

    +0

    谢谢Paul! – paradoxic 2010-08-09 18:27:20

    相关问题