我只是尝试用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。
发布于 2013-04-10 23:58:15
我不能重复Nokogiri在有效的HTML中从<body>
标记中剥离<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试图在文档被破坏时修复它,这可能导致标记被移动,或者,正如我在本例中所怀疑的那样,参数丢失了。
验证文档返回各种错误,所以我认为问题在Nokogiri之外。如果您想在将它传递给Nokogiri之前尝试修复它,您可以通过HTMLTidy发送该文件,然后查看Nokogiri是否能够更好地理解它。否则,花一些时间在HTML中挖掘,找出什么是坏的,并编写一些字符串操作代码来修补它。
不能将浏览器呈现的页面源与解析器(如Nokogiri )输出的内容进行比较。它们是非常不同的代码片段,有着非常不同的目标。浏览器想要使页面呈现某种内容,并且有各种各样的退步来处理损坏的HTML。解析器不这样做,因为它的工作是将HTML或XML准确地转换成它的真正结构,这样我们就可以深入研究它。
https://stackoverflow.com/questions/15933650
复制相似问题