如何使用Nokogiri从另一个站点获取AJAX加载的内容?

如何使用Nokogiri从另一个站点获取AJAX加载的内容?,ajax,html-parsing,nokogiri,Ajax,Html Parsing,Nokogiri,我试图从一个站点解析一些HTML内容。Nokogiri适用于首次加载的内容 现在的问题是如何获取使用AJAX加载的内容。例如,有一个“查看更多”链接,使用Ajax获取更多的项目,或者考虑基于Ajax的选项卡的情况。 如何获取该内容?您将无法解析任何需要JavaScript运行时才能使用Nokogiri生成该内容的内容。Nokogiri是一个HTML/XML解析器,而不是一个web浏览器 另一方面是web浏览器,尽管它是一种特殊的浏览器;)看看这一点,玩一玩。您将无法解析任何需要JavaScrip

我试图从一个站点解析一些HTML内容。Nokogiri适用于首次加载的内容

现在的问题是如何获取使用AJAX加载的内容。例如,有一个“查看更多”链接,使用Ajax获取更多的项目,或者考虑基于Ajax的选项卡的情况。


如何获取该内容?

您将无法解析任何需要JavaScript运行时才能使用Nokogiri生成该内容的内容。Nokogiri是一个HTML/XML解析器,而不是一个web浏览器


另一方面是web浏览器,尽管它是一种特殊的浏览器;)看看这一点,玩一玩。

您将无法解析任何需要JavaScript运行时才能使用Nokogiri生成内容的内容。Nokogiri是一个HTML/XML解析器,而不是一个web浏览器


另一方面是web浏览器,尽管它是一种特殊的浏览器;)看一看,然后玩一玩。

您想做什么还不完全清楚,但是如果您试图访问AJAX加载的其他HTML,那么您需要研究代码,找出AJAX请求使用的URL,是否设置了任何会话ID或cookie,然后创建一个新的URL,以复制AJAX正在使用的内容。请求,你就应该拿回新内容


但这可能很难做到。正如@Nuby所说,Mechanize可能是一个很好的帮助,因为它设计用于在后台为您管理cookie和会话。Mechanize在内部使用Nokogiri,因此如果您从Mechanize请求页面,您可以使用Nokogiri对其进行搜索,以向下搜索并提取任何特定的JavaScript字符串。它们将以文本的形式出现,因此您可以使用正则表达式或子字符串匹配来获取所需的特定参数,然后构造新的URL并要求Mechanize获取它。

您想做什么还不完全清楚,但如果您试图访问AJAX加载的其他HTML,则需要研究代码,弄清楚AJAX请求使用的URL是什么,是否设置了任何会话ID或cookie,然后创建一个新的URL来复制AJAX正在使用的内容。请求,你就应该拿回新内容


但这可能很难做到。正如@Nuby所说,Mechanize可能是一个很好的帮助,因为它设计用于在后台为您管理cookie和会话。Mechanize在内部使用Nokogiri,因此如果您从Mechanize请求页面,您可以使用Nokogiri对其进行搜索,以向下搜索并提取任何特定的JavaScript字符串。它们将以文本形式呈现,因此您可以使用正则表达式或子字符串匹配来获取所需的特定参数,然后构建新URL并要求Mechanize获取它。

您可能需要查看Mechanize(),它允许在网站交互方面进行更多控制(单击“更多”或AJAX选项卡等)。只是为了澄清,Nokogiri不获取内容,它只读取传递给它的文件句柄。如果您使用的是
open
,那么
open::URI
可能就在幕后,并且正在修改
open
以获取URL。Nokogiri解析检索到的HTML或XML有效负载。这是一个重要的区别。您可能想看看Mechanize(),它允许在网站交互方面进行更多的控制(单击“更多”或AJAX选项卡等)。只是澄清一下,Nokogiri不获取内容,它只读取传递给它的文件句柄。如果您使用的是
open
,那么
open::URI
可能就在幕后,并且正在修改
open
以获取URL。Nokogiri解析检索到的HTML或XML有效负载。这是一个重要的区别。我很高兴这有帮助。虽然我们总是想要优雅的解决方案,但有时候我们想要的东西的路径并不简单,所以我们必须把手弄脏。我已经做了几次我的建议;它完成了任务,但后来我为自己感到羞愧。:-)你能举例说明吗。?我真的很想要这件事,但寻找一个特别的例子,我很高兴这有帮助。虽然我们总是想要优雅的解决方案,但有时候我们想要的东西的路径并不简单,所以我们必须把手弄脏。我已经做了几次我的建议;它完成了任务,但后来我为自己感到羞愧。:-)你能举例说明吗。?我真的很想要这个东西,但是想找一个特别的例子