2011-08-18 86 views
1

我知道这个问题已经被刚才问,但我无法得到解析结果。我试图用nokogiri来解析metawords,有没有人能指出我的错误?引入nokogiri解析为metawords

keyword = [] 
meta_data = doc.xpath('//meta[@name="Keywords"]/@content')           #parsing for keywords 
meta_data.each do |meta| 
    keyword << meta.value 
end 
key_str=keyword.join(",") 

我试着在irb中运行这个,但关键字返回nil。

这是我用它在IRB

require 'rubygems' 
require 'nokogiri' 
doc = Nokogiri::HTML("www.google.com") 

已经尝试从其他计算器职位的替代品像
Nokogiri html parsing question,但没有用,他们还是回到零。我想我在某处做错了什么。

+0

难道这个答案在这里为你工作? http://stackoverflow.com/questions/3442237/nokogiri-html-parsing-question/3442302#3442302这可能是问题的重新发布。 –

+0

@Devin我已经试过了..它返回零为好。我尝试了所有可能的解决方案。 – noobie

+0

@noobie你还没有“尝试过所有可能的解决方案”。这是一个愚蠢的,不可能的,情节化的东西要写。 – Phrogz

回答

3
  1. www.google.com没有在源的任何元的关键字。查看页面上的源代码以查看自己。所以即使其他一切都完美无缺,您仍然无法获得结果。

  2. doc = Nokogiri::HTML("www.google.com")结果是

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
    <html><body><p>www.google.com</p></body></html> 
    

    如果你想获取一个URL的内容,你要使用这样的:如果你得到一个有效的

    require 'open-uri' 
    doc = Nokogiri::HTML(open('http://www.google.com')) 
    
  3. HTML页面,并使用上keywords适当的外壳相匹配的来源,它工作正常。这里有一个例子从我的IRB会议上,抓取的网页从恰巧使用name="keywords"而不是name="Keywords"我网站上的应用程序之一:

    irb(main):001:0> require 'open-uri' 
    #=> true 
    irb(main):002:0> require 'nokogiri' 
    #=> true 
    irb(main):003:0> url = "http://pentagonalrobin.phrogz.net/choose" 
    #=> "http://pentagonalrobin.phrogz.net/choose" 
    irb(main):04:0> doc = Nokogiri::HTML(open(url)); nil # don't show doc here 
    #=> nil 
    irb(main):005:0> doc.xpath('//meta[@name="keywords"]/@content').map(&:value) 
    #=> ["team schedule free round-robin league"] 
    
+0

感谢您的解决方案...事实证明,这对我的小K来说确实是一个愚蠢的错误,是的,这是一个错误的说法,使“所有可能的解决方案”,而不是“许多解决方案” – noobie