【问题标题】:Is it possible to find the <td> .. </td> text, when any of the <td>..</td> value is known?当任何 <td>..</td> 值已知时,是否可以找到 <td> .. </td> 文本?
【发布时间】:2013-01-22 20:11:24
【问题描述】:

我有一个类似html 格式的网页,格式如下:

<form name="test">

<td> .... </td>
  .
  .
  .
<td> <A HREF="http://www.edu/st/file.html">alo</A> </td>
<td> <A HREF="http://www.dom/st/file.html">foo</A> </td>
<td> bla bla </td>

</form>

现在,我只知道bla bla 的值,我们可以根据该值跟踪或找到3rd last .. 值(这里是alo)吗?我可以在HREF 值的帮助下跟踪这些值,但HREF 值并不总是固定的,它们可以是任何时间。

【问题讨论】:

  • 再一次,您的 HTML 并没有真正的帮助。是否有一个 &lt;tr&gt; 包装每个 &lt;td&gt; 或者它们都嵌入在一个 &lt;tr&gt; 中? &lt;table&gt; 开始和结束标签在哪里?关于使用 Nokogiri 解析 HTML 表格的 SO 存在无数问题。
  • @theTinMan 合二为一。但我没有使用nokogiri,而是使用mechanize

标签: ruby mechanize mechanize-ruby


【解决方案1】:

从 HTML 文档中提取每个 &lt;td&gt; 很容易,但它并不是一种万无一失的 DOM 导航方式。但是,鉴于示例 HTML 的局限性,这里有一个解决方案。不过,我怀疑它是否能在现实世界中发挥作用。

Mechanize 在内部使用 Nokogiri 进行繁重的工作,因此如果您已经需要 Mechanize,则无需使用 require 'nokogiri'

require 'nokogiri'

doc = Nokogiri::HTML::DocumentFragment.parse(<<EOT)
<td> <A HREF="http://www.edu/st/file.html">alo</A> </td>
<td> <A HREF="http://www.dom/st/file.html">foo</A> </td>
<td> bla bla </td>
EOT

doc.search('td')[-3].at('a')['href']
=> "http://www.edu/st/file.html"

如何从 Mechanize“代理”获取 Nokogiri 文档留给用户练习。

【讨论】:

  • 谢谢先生在这里帮助我。但我正在使用机械化。所以想知道我如何使用机械化pageform 对象和nokogiri
  • 您需要搜索答案。 Nokogiri 文档没有提到任何关于机械化的内容。而且,正如@lichtamberg 和我所说,Mechanize 使用 Nokogiri,所以你使用 Nokogiri 并且可以使用它。
  • 我发现是doc = Nokogiri::HTML::DocumentFragment.parse(agent.current_page().body) :)
  • 错了,因为你不需要重新解析任何东西。当 Mechanize 交出它时,它已经是一份 Nokogiri 文件。在堆栈溢出上搜索。有很多关于它的问题。
【解决方案2】:

http://nokogiri.org/

它可以帮助您解析 html 代码,然后通过选择器找到元素

【讨论】:

  • 我正在使用mechanize。所以我不能使用nokogiri。我正在寻找同样的mechanize 解决方案。
  • mechanize 正在使用 nokogiri 进行解析.. 所以你可以使用这些选择器
  • 好的!我对nokogiri不太了解!你能帮我用我的例子给出一个示例代码吗?
  • 如何将mechanize 页面或表单对象与nokogiri 一起使用?
  • @PythonLikeYOU 使用page.parser 获取 nokogiri 解析器,然后使用所有 nokogiri 函数对其进行操作。与Nokogiri::HTML(page.body)相同。
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2016-08-12
  • 1970-01-01
相关资源
最近更新 更多