我构建了一个scrapy
爬虫,并为一系列页面构建了一个爬虫,这些页面以一种重复的模式保存它们的信息,即堆叠tr和td标记。你知道吗
它们的基本XPath是
/div/table/tr[5]/td/table/tr/td/table[1]/tr[/*number*/]/td[2]/strong/text()
其中/*number*/
是一个整数,用于区分要提取的每个单独字段。例如,项目的名称始终为1,网站为3,电子邮件为7,以此类推,ContactEmail
是我需要的tr标记的最后一个-但不是范围内的最后一个。因此,我只是使用带有extract方法的XPath来获取每个值并将其添加到我的item对象中——但是我发现有些页面有一个可选的ContactPosition
字段,它只出现在某些项中,并且总是在ContactEmail
之前的索引中。在我看到的例子中,ContactEmail
在所有情况下都会在索引13处,除了那些有ContactPosition
值的情况,在那里它会被移动到索引14。你知道吗
有没有什么方法可以检查有多少tr标记,这样我就可以使用if-else来分配正确的索引号并避免索引越界异常?你知道吗
@tdelaney公司:
页面上的标签都是这样读的。你知道吗
<tr>
<td class="cont_1col_txt_cuerpo">Position:</td>
<td class="cont_1col_txt_cuerpo"><strong>General Manager</strong></td>
</tr>
<tr>
<td class="cont_1col_txt_cuerpo">Email:</td>
<td class="cont_1col_txt_cuerpo"><strong>samir@philka.com</strong></td>
</tr>
我想这么做但是 1) ContactPosition标签在没有CP的页面中会丢失,所以使用它不会产生错误吗? 2) 每个页面都有两封电子邮件,但两封电子邮件的标签都是相同的,它们之间唯一的区别是,一封固定在第5个tr标签上,另一封(我称之为ContactEmail)可能在13号或14号,因此使用email标签进行识别不会很好。你知道吗
您可以使用
(your/xpath/here)[last()]
模式来获取整个XML文档的最后一个匹配元素。将其与注释中的@tdelaney所建议的结合起来,即通过第一个td
元素的内容来标识目标tr
,您将得到如下结果:^{}
测试XML:
输出:
相关问题 更多 >
编程相关推荐