Scrapy选择XPath正文和链接文本

2024-05-16 06:59:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在整理一张会议时间表。其中一列包含会议状态和议程链接(如果有的话)。我可以使用以下方法来拉动电池:

刮壳:

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

外壳结果:

['<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(),但我想选择两者。我该怎么做?你知道吗


Tags: textpdf状态status时间表议程会议xpath
3条回答

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

然而,在Scrapy中可能有一个更好的方法,这样您就不必采取额外的步骤。你知道吗

您可以尝试实现或(|),如下所示

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

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

您可以字符串化td内容:

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

相关问题 更多 >