我正在整理一张会议时间表。列之一包含会议状态和议程链接(如果有)。我可以使用以下方法拉出单元格:
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(),但我想同时选择两者。我该怎么做?
答案 0 :(得分:0)
您可以使用的一种方法是正则表达式。以下正则表达式将捕获任何文本:>([A-Za-z ]+)<
。
但是,Scrapy中可能有更好的方法,因此您不必采取额外的步骤。
答案 1 :(得分:0)
您可以字符串化 td
内容:
result_str = item.xpath('string(.//td[4])').extract_first()
答案 2 :(得分:0)
您可以尝试如下实现OR(|
)
'./a/text() | ./text()'
这表示返回子链接文本或直接子文本节点或两者(如果都存在)