2013-04-10 83 views
0

我只是尝试代理网站与解析使用nokogiri。Nokogiri失去属性

我的控制器动作

des show 
    @url    = 'http://www.femmeactuelle.fr/' 
    @with_nokogiri  = Nokogiri::HTML(open(@url).read).to_html 
    @without_nokogiri = open(@url).read 

    if params.has_key? :nokogiri 
    render text: @with_nokogiri, layout: false 
    else 
    render text: @without_nokogiri, layout: false 
    end 
end 

如果我用?引入nokogiri = foo的这个动作,身体失去其ID。任何想法是什么原因? 我只想与浏览器在用nokogiri解析后看到的html相同。

+0

你能澄清你'失去身份证'的意思吗?你看到了什么结果,你期望什么? – PinnyM 2013-04-10 18:32:36

+0

我已更新该问题。 – Awea 2013-04-10 18:42:09

+0

仍然没有关注你,你可以发布你看到的错误/不同的HTML代码片段,以及你期望的样子吗? – PinnyM 2013-04-10 18:45:36

回答

2

我无法复制Nokogiri在有效HTML中从<body>标签剥离id参数的问题。这里是我的引入nokogiri /的libxml和红宝石事项:

nokogiri: 1.5.9 
ruby: 
    version: 1.9.3 
    platform: x86_64-darwin10.8.0 
    description: ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin10.8.0] 
    engine: ruby 
libxml: 
    binding: extension 
    compiled: 2.7.7 
    loaded: 2.7.7 

这里引入nokogiri的一个简单的测试:

doc = Nokogiri::HTML('<html><body id="foo">bar</body></html>') 

puts doc.to_html 

返回:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body id="foo">bar</body></html> 

当我解析 'http://www.femmeactuelle.fr/',引入nokogiri的errors方法返回一些错误,包括<head><body>。 Nokogiri会在文档被破坏时尝试修复文档,这可能会导致标签被移动,或者,正如我在这种情况下怀疑的那样,参数会丢失。

Validating the document返回各种错误,所以我认为问题出在Nokogiri之外。如果您想在将它传递给Nokogiri之前尝试修复它,可以通过HTMLTidy发送文件,然后查看Nokogiri是否可以更好地理解它。否则,花一些时间仔细研究HTML,找出什么是坏的,然后编写一些字符串操作代码来修补它。

您无法将浏览器呈现的页面源与Nokogiri等解析器输出的内容进行比较。他们是非常不同的代码片段,目标非常不同。浏览器想要使页面呈现某些内容,并且具有处理破碎的HTML的各种后备功能。解析器没有,因为它的工作是准确地将HTML或XML转换为它的真实结构,所以我们可以通过它进行挖掘。