【问题标题】:Ruby Mechanize - How to parse the site response before Mechanize parses it?Ruby Mechanize - 如何在 Mechanize 解析站点响​​应之前解析它?
【发布时间】:2015-06-21 08:29:54
【问题描述】:

问题:

解析网站时,有些字符会导致 Mechanize 无法正确解析。

提出的解决方案

  • 解析来自网站的响应以删除这些字符 在 mechanize 尝试解析它之前。
  • 或者,在 Mechanize 解析 Web 后删除这些字符,然后让 Mechanize 重新解析它以获取链接、表单等...

问题

  • 如何在解析之前访问网站响应?

  • 或者,我以后怎么解析,然后让 Mechanize 重新加载?

谢谢!

【问题讨论】:

  • 无法理解您的第二个问题。
  • 我的想法是让 mechanize 下载网站并使用 page.body 访问它。然后在那里删除我需要的字符,然后要求页面重新加载/重新解析器本身,以便我可以再次访问表单和链接。

标签: html ruby parsing mechanize


【解决方案1】:

如果您想自己处理解析,请不要使用 mechanize 来获取 html 数据。使用其他一些 gem 来获取 html,然后手动解析它。如果您不打算使用它的解析,那么使用 mechanize 有什么意义? :|

【讨论】:

  • 嗯,我想使用 mechanize 来解析 html 数据并给我链接、表单、nokogiri 输出等列表...但是,Mechanize(和 Nokogiri)根本无法解析 html由于这两个特殊字符,所以我需要/想要做的就是删除它们。
【解决方案2】:

好的,我找到了解决方案: 您可以定义自己的 html 解析器,使其可以像钩子一样工作。

class MyParser
  def self.parse(thing, url = nil, encoding = nil, options = Nokogiri::XML::ParseOptions::DEFAULT_HTML, &block)
    thing = thing.gsub(/\x00/,"")
    Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block)
  end
end
agent.html_parser = MyParser
search_page = agent.get "https://www.example.com"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2011-09-11
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多