Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Ruby on Rails从解析的HTML生成Xpath_Ruby On Rails_Ruby_Xpath_Web Scraping - Fatal编程技术网

Ruby on rails 使用Ruby on Rails从解析的HTML生成Xpath

Ruby on rails 使用Ruby on Rails从解析的HTML生成Xpath,ruby-on-rails,ruby,xpath,web-scraping,Ruby On Rails,Ruby,Xpath,Web Scraping,给出以下HTML示例: <table cellpadding="4" cellspacing="0" border="0" width="100%"> <tbody> <tr bgcolor="#FFE4D8" valign="top"> <td>in the next 20 minutes you will learn how to create a winter landscape. For this excersize y

给出以下HTML示例:

<table cellpadding="4" cellspacing="0" border="0" width="100%">
  <tbody>
    <tr bgcolor="#FFE4D8" valign="top">
    <td>in the next 20 minutes you will learn how to create a winter landscape. For this excersize you do need to have only a basic experience in Lightwave, so lets just start with it.<br>
  </tbody>
</table>

在接下来的20分钟里,您将学习如何创建冬季景观。对于这个练习,你只需要有光波方面的基本经验,所以让我们从它开始。

如何为包含“20分钟”的标记自动生成Xpath表达式;以同样的方式。这可以从Ruby内部实现吗?

假设文本没有被分成不同的标记,您可以通过

//*[contains(text(),'20 minutes')]
然后,您可以通过在XPath末尾添加
/..
生成父字符串,直到获得根元素
html
。在每一步中,您还需要通过

//*[contains(text(),'20 minutes')]/position()
和更高的元素

//*[contains(text(),'20 minutes')]/../position()
知道每个标记的名称和位置后,可以构建路径

/html[1]/body[1]/div[x]/table[y]/tbody[z]/tr[1]/td[1] /html[1]/body[1]/div[x]/table[y]/tbody[z]/tr[1]/td[1] 其中x、y、z为占位符

因为我不懂ruby,所以无法提供源代码,但这将是一个简单的算法。好的是,您可以使用任何知道XPath的DOM解析器来实现这一点。如果DOM解析器有一种返回节点父节点的方法,则可以对其进行相当大的优化,因为在XPath中为每个步骤单独选择父节点的速度很慢,并且对于许多/长文档来说是不可行的


ruby似乎支持
parent()
方法。

只是为了澄清一下,您想要生成一个给定字符串的XPath表达式吗?我想要生成一个匹配特定条件的元素的XPath表达式。更大的问题是,为什么您想要/需要构建一个特定的XPath?为什么
/*[contains(text(),'20 minutes')]
不能为您工作?我正在创建一个spider,它将能够确定站点的底层CMS。它应该保存找到的Xpath,并将其与其他匹配项进行比较,以便找到系统之间的相似之处。虽然此Xpath导航正在工作,但它并不完全是我所寻找的。那么,您在寻找什么?其他路径格式或正在等待插入的工作代码?