Scrapy xpath选择常规文本和链接文本

时间:2018-07-10 20:23:10

标签: python xpath scrapy

我正在整理一张会议时间表。列之一包含会议状态和议程链接(如果有)。我可以使用以下方法拉出单元格:

Scrapy Shell:

things = response.xpath('//tbody/tr')
for thing in things:
   ...:     status_str = item.xpath('.//td[4]').extract()
   ...:     print(status_str)

Shell结果:

['<td><a href="somelink/agenda1.pdf">Agenda</a></td>']
['<td>Meeting postponed</td>']
['<td><a href="somelink/agenda2.pdf">Agenda</a></td>']
['<td>Postponed</td>']
['<td><a href="somelink/agenda3.pdf">Agenda</a></td>']
['<td>Agenda</td>']
['<td>Agenda</td>']

我可以成功选择a / text()或text(),但我想同时选择两者。我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以使用的一种方法是正则表达式。以下正则表达式将捕获任何文本:>([A-Za-z ]+)<

但是,Scrapy中可能有更好的方法,因此您不必采取额外的步骤。

答案 1 :(得分:0)

您可以字符串化 td内容:

   result_str = item.xpath('string(.//td[4])').extract_first()

答案 2 :(得分:0)

您可以尝试如下实现OR(|

'./a/text() | ./text()'

这表示返回子链接文本或直接子文本节点或两者(如果都存在)