Scrapy - 可选的hxs.select

时间:2013-08-04 22:11:51

标签: select xpath scrapy

所以,我的问题是,当我提取数据时,页面上有几个条目,因为没有与它们相关联的链接,它们不会被选中:

为了更好地解释,hxs.select语句几乎可以获取所有数据:

 opening = hxs.select('//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr/td[7]/font/a/text()').extract()

此声明只有3个开场电影日期。正如我所提到的,这三个缺失的日期没有与它们相关联的链接,实际上可以在以下位置找到:

 hxs.select('//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr/td[7]/font/text()').extract()

*注意:最后没有找到/a

我只想添加一个额外的声明来获取这些,但我需要按顺序提供所有信息。我也有声明获得电影名称和收入金额。然后我接受这些语句并迭代它们以将它们与它们所属的位置配对 - 如果我添加另一个语句来单独处理它们,我就不能这样做。有什么建议吗?

::::数据::::: 以下是我想要获取的数据的网址BoxOfficeMojo

快速说明:如果您使用Firebug查看xpath,它会添加tbody,它实际上并不存在(它会将其添加)。

以下是正常开放日期:

<td bgcolor="#ffffff" align="right">
   <font size="2">
      <a href="/schedule/?view=bydate&release=theatrical&date=2010-06-11&p=.htm">6/11/2010</a>
   </font>
</td>

以下是“问题”开放日期之一:

<td bgcolor="#f4f4ff" align="right">
  <font size="2">11/20/1981</font>
</td>

1 个答案:

答案 0 :(得分:1)

只需使用后代或自轴步骤<font/>选择该//元素中的所有文本节点。

//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr/td[7]/font//text()