如何修复此Nokogiri文档结果以使其清晰可辨?

时间:2014-05-21 21:58:17

标签: ruby-on-rails ruby nokogiri

我试图抓住kickass.to而且我难以归还一份清晰易读的文件。

这是我的代码:

require 'nokogiri'
require 'open-uri'

url = "http://kickass.to/usearch/Mobile%20Suit%20Gundam:%20Char%27s%20Counterattack%201988category:movies/"
doc = Nokogiri::HTML(open(url))

结果:

#<Nokogiri::HTML::Document:0x3ffb45c23ab4 name="document" children=[#<Nokogiri::XML::DTD:0x3ffb45c23744 name="html">, #<Nokogiri::XML::Element:0x3ffb45c26fc0 name="html" children=[#<Nokogiri::XML::Element:0x3ffb45c26db8 name="body" children=[#<Nokogiri::XML::Element:0x3ffb45c26bb0 name="p" children=[#<Nokogiri::XML::Text:0x3ffb45c269a8 "\u008B      å}ùvÛF²÷ßñSt8Ç\u009142H,Y\u0092©Åñ\u008Cíx,%\u0099\\_],\r\tÐX$Ñ\u0093y¢ï¾ÿî\u0093Ý_u ¸\u0088\"eÑ\u008E3>>\"6º««ªkëBõþ÷Ç?\u009Dÿöæ\u0084õ\u0093áàðÑ>}°\u009Bá \u0088*ý$íÕj×××Õk£F½\u009AÖn·k7Ô¦Â\\?:¨\u0092¨BOqË=|Äðo\u007FÈ\u009D%#\u007FLý«\u0083ÊQ$">, #<Nokogiri::XML::Element:0x3ffb45c268cc name="h">]>]>, #<Nokogiri::XML::Element:0x3ffb45c26480 name="html" children=[#<Nokogiri::XML::Element:0x3ffb45c26278 name="p" children=[#<Nokogiri::XML::Text:0x3ffb45c26070 "T~\u0093Ô¨§§Ìé[QÌ\u0093\u00834ñ\u0094V¥vWGgÉxÀvçÄñôã\u00815ä\u0097ÇNä\u008F?J CάÀenxBËeÃÐö\u009CÅ©\u009F°^¸ÖpOÀ¶ì³\u0088¬$±\u009CKfÙq8H>3/\u008C\u0098q^e§V\u009C}ÅUvìGÜ\u0099ÜaW¾Å~\u007Fì+ËXö\u0080/\u00825\ní0\u0089K`¡¸ü¦Â\">8¨¤1·\"§_¯=\u0083ó0\u008A@\u0094\u00981ýÝw.­8Îoí×d§\u0092\u009C?¸\u0094CÇ\u0084ö¸ÏyRa\th\u0099\u0091\u0090pÎú÷*µúI¬ÄwªN8¬Y\u0083\u0081¢µ\u009Aå\u0094.\u008DÑ£ÄIæ\u0083OnéÖZ=×Uñ§\u0092÷ôhfk4«$aêô\u0095»»\u009Cm]=Ñ·ìö{Eyç{l\u0090°'¬ù>cSüÂùcÎ5\u009F7¦q ¨¸\u00959N¾\u007FÇ×÷Þ+Êa6«løuÆn>üØ­UçÝ\u00924ÿìùJt·óaåJfqäÌñÛ\u0087Xȳ:ô\u0083bâÀ\u009D%ný\u0080Å'»¨î×äUFÈ[1ÞK8Q¼ á.\u008A·\u008BÁ×ßB\u0092\u0096¡£WVÄ.­\u0084°\u007F\t\u0086¤{ôp+澻Ƕ²·õdª\u0089ËÈ¢\u008B\u0081ôö\u0098:ý

你得到了照片。它难以辨认,我似乎无法弄清楚特定元素的位置。任何想法从哪里开始?

2 个答案:

答案 0 :(得分:1)

我认为你误解了Nokogiri的工作方式。 Nokogiri不会在请求的页面上返回原始HTML,它会将每个DOM元素包装在Nokogiri对象中,并返回包含所有这些元素的Nokogiri可枚举对象。

很难帮助您,因为您不清楚是否要提取所有HTML或页面的特定部分。 Nokogiri通过使用CSS样式选择器来查询&#39; Nokogiri对象并提取你想要的元素。

如果您参考Nokogiri文档,这将有所帮助,但使用示例......

doc.css('h3.r a').each do |link|
    puts link.content
end

这假设您有一个包含Nokogiri刮擦结果的变量(在您的情况下,您也使用了#doc; doc&#39;)。 然后,它会搜索所有节点,这些节点是h3标签中包含的链接(标签),其类别为&#39; r&#39;。 在这种情况下,它们循环遍历符合此条件的元素(.css函数也返回一个可枚举的,因为可能有多个符合条件的元素)并将这些元素打印到控制台。

答案 1 :(得分:1)

在MRI Ruby 2.1.1上为我工作正常。您可以尝试重新安装/更新Nokogiri和/或使用Ruby执行相同的操作。