Tag: hpricot

XML => HTML与Hpricot和Rails

我从未使用过Web服务和rails,显然这是我需要学习的东西。 我选择使用hpricot,因为它看起来很棒。 无论如何,_why足以在hpricot网站上提供以下示例: #!ruby require ‘hpricot’ require ‘open-uri’ # load the RedHanded home page doc = Hpricot(open(“http://redhanded.hobix.com/index.html”)) # change the CSS class on links (doc/”span.entryPermalink”).set(“class”, “newLinks”) # remove the sidebar (doc/”#sidebar”).remove # print the altered HTML puts doc 这看起来简单,优雅,易于peasey。 在Ruby中运行得很好,但我的问题是:如何在rails中解决这个问题? 我尝试将所有内容添加到单个控制器中,但无法想到在视图中调用它的最佳方法。 因此,如果您正在从Web API解析XML文件并使用Hpricot以干净的HTML打印它,那么您将如何分解模型,视图和控制器上的活动,以及您将放在哪里?

您如何知道何时使用XML解析器以及何时使用ActiveResource?

我尝试使用ActiveResource来解析更像HTML文档的Web服务,并且我一直收到404错误。 我是否需要为此任务使用XML解析器而不是ActiveResource? 我的猜测是ActiveResource仅在您使用来自另一个Rails应用程序的数据时才有用,并且XML数据可以轻松转换为Rails模型。 例如,如果Web服务是更广泛的XML(如HTML文档或RSS源),则需要使用像hpricot或nokogiri这样的解析器。 它是否正确? 您如何知道何时使用XML解析器以及何时使用ActiveResource?

未封闭的img标签问题

数据以HTML格式呈现并提交给服务器,进行一些预处理。 它使用“img”标签的“src”属性进行操作。 在预处理和保存之后,所有预处理的“img”标签都不是自动关闭的。 例如,如果“img”标记如下: 在使用Nokogiri或Hpricot进行预处理后,它将是: 代码非常简单: doc = Hpricot(self.content) doc.search(“img”).each do |tag| preprocess tag end self.content = doc.to_html 对于Nokorigi来说,它看起来是一样的。 如何解决这个问题? 更新1 忘了提 – 我有HTML 5页面,我试图用W3C Validatorvalidation 。 当“img”标签位于div内时,它会抱怨以下内容: required character (found d) (expected i) 例如,尝试validation以下代码: 你会得到同样的错误: Line 9, Column 4: required character (found d) (expected i)

Hpricot – UTF-8问题

运行以下代码时出现以下错误: invalid byte sequence in UTF-8 (ArgumentError) 代码: require ‘hpricot’ require ‘open-uri’ doc = open(‘http://www.amazon.co.jp/’) {|f| Hpricot(f.read) } puts doc.to_html Hpricot无法解析日文内容。 有关解决此问题的任何建议吗?

使用JRuby(Hpricot?)解析XML,使用之类的标签

我试图在JRuby中使用这样的元素来使用一些遗留XML: content 我一直在使用Hpricot,但是Hpricot的面向HTML的快捷方式正在对我不利: doc.search(“//with.dot”)似乎正在寻找 (几年前我也遇到过JQuery这个问题。) 我可以用Hpricot做这个,还是我需要使用不同的库?

使用ruby将HTML转换为纯文本并维护结构/格式

我想将html转换为纯文本。 我不想只删除标签,我想尽可能智能地保留尽可能多的格式。 为标签插入换行符,检测段落并将其格式化,等等。 输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有锚点或图像)。 我可以把几个正则表达式放在一起,让我80%,但想到可能有一些现有的解决方案具有更多的智能。

由火虫产生的xpath中的Tbody标签

我正在尝试使用ruby hpricot库从在线htmls中提取一些数据。 我使用firefox扩展fire bug来获取所选项目的xpath。 生成的xpath表达式中始终存在额外的tbody标记。 在某些情况下,我必须从表达式中删除tbody标记以获得结果,而在其他情况下,我必须保留标记以获得结果。 我只是无法弄清楚何时保留tbody标签以及何时不能。

使用Ruby with Mechanize登录网站

我需要从网站上抓取数据,但首先需要登录。 我一直在使用hpricot成功地抓住其他网站,但我是新手使用机械化,我真的很困惑如何工作。 我看到这个例子通常被引用: require ‘rubygems’ require ‘mechanize’ a = Mechanize.new a.get(‘http://rubyforge.org/’) do |page| # Click the login link login_page = a.click(page.link_with(:text => /Log In/)) # Submit the login form my_page = login_page.form_with(:action => ‘/account/login.php’) do |f| f.form_loginname = ARGV[0] f.form_pw = ARGV[1] end.click_button my_page.links.each do |link| text = link.text.strip next unless text.length > 0 puts […]

hpricot与firebug的XPath

我正在尝试使用hpricot从基于表的网站中提取一些信息。 我用FireBug获得了XPath。 /html/body/div/table/tbody/tr/td/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr[3]/td/table[3]/tbody/tr 这不起作用……显然,FireBug的XPath是呈现HTML的路径,而不是网站的实际HTML。 我读到删除tbody可能会解决问题。 我试着用: /html/body/div/table/tr/td/table/tr[2]/td/table/tr/td[2]/table/tr[3]/td/table[3]/tr 并且仍然无法工作…我做了一些研究,有些人报告他们让他们的XPath删除数字,所以我试试这个: /html/body/div/table/tr/td/table/tr/td/table/tr/td/table/tr/td/table/tr 还是没有运气…… 所以我决定一步一步这样做: (doc/”html/body/div/table/tr”).each do |aaa | (aaa/”td”).each do | bbb| pp bbb (bbb/”table/tr”).each do | ccc| pp ccc end end end 我在bbb中找到了我需要的信息,但在ccc中找不到。 我做错了什么,或者有更好的工具来废弃使用长/复杂XPath的HTML。

如何在Nokogiri中进行正则表达式搜索以查找与某个开头相匹配的文本?

鉴于: require ‘rubygems’ require ‘nokogiri’ value = Nokogiri::HTML.parse(<<-HTML_END) " A Foo B C Bar D E F ” HTML_END 我想做一些像我在Hpricot中可以做的事情: divs = value.search(‘//div[@id^=”para-“]’) 如何在XPath样式中搜索元素的模式? 我在哪里可以找到帮助我的文档? 我没有在rdocs中看到这一点。