Ruby on rails 使用Ruby on Rails从解析的HTML生成Xpath
给出以下HTML示例: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
<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导航正在工作,但它并不完全是我所寻找的。那么,您在寻找什么?其他路径格式或正在等待插入的工作代码?