nokogiri 相关问题

适用于Ruby的HTML,XML,SAX和Reader解析器,能够通过XPath或CSS3选择器搜索文档......等等

[进行更精确的编辑] =抓取Ruby Mechanize-需要在显示完整的html代码之前提交表单

感谢您的回答,我添加了一些代码和详细信息,以使其更加准确。我希望我的问题更容易理解。非常感谢你。 #对于一个学校项目,我正在尝试刮除...

回答 1 投票 0

如何使用Ruby和机械化方法解析格式错误的HTML

我正在使用Mechanize导航HTML格式错误的网站。特别是,我有一个页面,该页面的复选框超出服务器可以合理地处理请求的形式。我想要...

回答 2 投票 3

带有Nokogiri的问题开放站点-请求超时-应归咎于Etags?

[我正在尝试使用nokogiri Nokogiri :: HTML(open(“ https://www.mrporter.com”))打开MrPorter.com,并且出现以下错误:Net :: ReadTimeout:Net ::使用# ]] >>> 如果发送net / http请求,则该站点受用户代理验证的保护。您可以按如下方式解析页面: require 'nokogiri' page = `curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" https://www.mrporter.com/en-gb/` parse_page = Nokogiri::HTML(page) 您将获得一个已分析的页面

回答 1 投票 0

如何在Nokogiri节点名称中使用冒号(“:”)

我希望以下代码中的节点名称为“ node:name”,但是名称被放入字段的文本中。需要'nokogiri'文件= File.new(“ / Users / adamar / code / xmler / test.xml”,“ w +” ...

回答 2 投票 7

如何使用Nokogiri从哈希中构建节点

许多人通常想做相反的转换,但是我想从Ruby哈希(具有许多嵌套的哈希,甚至是数组)构建一个节点:my_hash = {“ name” =>“ Something”,“ ...] >

回答 2 投票 1

如何使用Nokogiri Builder创建带有命名空间根元素的XML文档

我正在为需要名称空间的XML数据实现导出器。我正在使用Nokogiri的XML Builder(版本1.4.0)来执行此操作,但是,我无法让Nokogiri创建带有名称空间的根节点。 ...

回答 3 投票 13

如何从Nokogiri :: XML :: Builder创建Nokogiri :: XML :: Node

我需要用我要创建的新HTML替换文档中的节点。我要替换的节点的类是:Nokogiri :: XML :: Node我使用Nokogiri Builder创建片段:new_node = ...

回答 1 投票 -1

如何在红宝石上刮下一页

我正在尝试抓取名为https://www.jobsatosu.com/postings/search的网站的下一页。因为工作很多,所以页面很多。我们的小组成功抓取了第一页...

回答 1 投票 -1

如何使用Mechanize / Nokogiri获取页面源

我已使用Mechanize登录到网页/ servlet。我有一个页面对象:jobShortListPg = agent.get(addressOfPage)当我使用:puts jobShortListPg我得到了页面的“机械化”版本,它是...

回答 3 投票 23

如何从HTML文本中删除空格

如何删除代码中的空格?如果我使用Nokogiri解析此HTML: KühlungsbornerStraße10 ...

回答 2 投票 0

无法使用nokogiri从此页面提取标签

到目前为止,我还没有看到我能理解的解决方案。非常新手。这是我要抓取的html结构,https://webfec.org.br/Utils/GetCentrobyId?cod = 1我正在尝试做一些...

回答 1 投票 0

如何使用Nokogiri删除重复的嵌套标签

我有带嵌套重复标签的HTML: &...] >>>]] > 通常,我不喜欢Nokogiri使用的可变结构,但是在这种情况下,我认为它对您有利。这样的事情可能会起作用: def recurse node # depth first so we don't accidentally modify a collection while # we're iterating through it. node.elements.each do |child| recurse(child) end # replace this element's children with it's grandchildren # assuming it meets all the criteria if merge_candidate?(node) node.children = node.elements.first.children end end def merge_candidate? node, name: 'div' return false unless node.element? return false unless node.attributes.empty? return false unless node.name == name return false unless node.elements.length == 1 return false unless node.elements.first.name == name return false unless node.elements.first.attributes.empty? true end [18] pry(main)> file = File.read('test.html') [19] pry(main)> doc = Nokogiri.parse(file) [20] pry(main)> puts doc <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <div> <div> <p>Some text</p> </div> </div> </div> </body> </html> [21] pry(main)> recurse(doc) [22] pry(main)> puts doc <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <p>Some text</p> </div> </body> </html> => nil [23] pry(main)> 基于HTML的结构,这应该可以帮助您: require 'nokogiri' doc = Nokogiri::HTML(<<EOT) <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <div> <div> <p>Some text</p> </div> </div> </div> </body> </html> EOT dd = doc.at('div div').parent dp = dd.at('div p') dd.children.unlink dp.parent = dd 将导致: puts doc.to_html # >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> # >> <html> # >> <head> # >> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> # >> </head> # >> <body> # >> <div><p>Some text</p></div> # >> </body> # >> </html> [dd是两个连续的parent标签的parent,换句话说,它是链中的第一个div。 [div是该链末端的dp节点。 [p是一个包含dd.children的children,一直到children并包括dd的NodeSet。 想法是在除去所有其他插入的dp标签之后,将dp(所需的<p>节点)嫁接到dd(最顶部的<div>节点)。通过<div>可以轻松一次一次NodeSet大量标签。 阅读有关unlink的知识,以了解为什么它对于此类问题很重要。

回答 2 投票 2

如何使用nokogiri删除重复的嵌套标签?

我有带嵌套重复标签的HTML: &...] >>>]] > 通常,我不喜欢Nokogiri使用的可变结构,但是在这种情况下,我认为它对您有利。这样的事情可能会起作用: def recurse node # depth first so we don't accidentally modify a collection while # we're iterating through it. node.elements.each do |child| recurse(child) end # replace this element's children with it's grandchildren # assuming it meets all the criteria if merge_candidate?(node) node.children = node.elements.first.children end end def merge_candidate? node, name: 'div' return false unless node.element? return false unless node.attributes.empty? return false unless node.name == name return false unless node.elements.length == 1 return false unless node.elements.first.name == name return false unless node.elements.first.attributes.empty? true end [18] pry(main)> file = File.read('test.html') [19] pry(main)> doc = Nokogiri.parse(file) [20] pry(main)> puts doc <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <div> <div> <p>Some text</p> </div> </div> </div> </body> </html> [21] pry(main)> recurse(doc) [22] pry(main)> puts doc <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <p>Some text</p> </div> </body> </html> => nil [23] pry(main)> 基于HTML的结构,这应该可以帮助您: require 'nokogiri' doc = Nokogiri::HTML(<<EOT) <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div> <div> <div> <p>Some text</p> </div> </div> </div> </body> </html> EOT dd = doc.at('div div').parent dp = dd.at('div p') dd.children.remove dp.parent = dd 将导致: doc.to_html # => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n" + # "<html>\n" + # " <head>\n" + # " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n" + # " </head>\n" + # " <body>\n" + # " <div><p>Some text</p></div>\n" + # " </body>\n" + # "</html>\n" [dd是两个连续的div标签的父级,换句话说,它是链中的第一个div。 [dp是该链末端的p节点。 想法是移植dp,p节点, to dd, the topmostdiv, after removing all the other interveningdiv`标签。

回答 2 投票 0

如何使用Nokogiri将具有名称空间的节点树插入到现有XML文件中?

我一直在使用Nokogiri来生成XML文件(特别是使用某些yEd名称空间的GraphML文档)。我正在生成的文件类型的示例:

回答 1 投票 0

如何使用Nokogiri替换HTML节点

我有一个HTML文件,其中所有 必须替换为 代码是:doc.css(“ div.replace-me”)。each do ...

回答 3 投票 0

如何使用Nokogiri的xpath和at_xpath方法

我正在学习如何使用Nokogiri,基于此代码,我遇到了几个问题:require'rubygems'需要'mechanize'post_agent = WWW :: Mechanize.new post_page = post_agent.get('http:// www。 ...

回答 1 投票 5

如何阅读nokogiri.org文档

上周,我开始用Ruby编写脚本。我需要从网络上抓取一些数据,所以被告知要先使用Mechanize然后再使用Nokogiri。机械化文档说:机械化使用...

回答 2 投票 0

获取特定索引的元素nokogiri

我如何获得索引2的元素。例如,在以下HTML中,我要显示第三个元素,即DIV: &...

回答 2 投票 3

使用Nokogiri的一些例子?

我正在尝试了解Nokogiri。是否有人链接到Nokogiri分析/显示显示结果树的基本示例的链接。认为这确实有助于我的理解。

回答 1 投票 7

如何使用Nokogiri将具有名称空间的节点树插入到现有XML文件中?

我一直在使用Nokogiri来生成XML文件(特别是使用某些yEd名称空间的GraphML文档)。我正在生成的文件类型的示例:

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.