我只是尝试使用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 :(得分:2)
我无法复制Nokogiri从有效HTML中的id
标记中剥离<body>
参数的问题。这是我的Nokogiri / LibXML和Ruby细节:
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转换为其真实结构,以便我们可以深入研究它。