scrapy:如果节点包含子节点

时间:2017-12-06 00:48:50

标签: web-scraping scrapy

我有以下网页: https://www.bbc.co.uk/search?q=Juice&sa_f=search-product&filter=news&suggid=

对于每篇文章,我都有以下html部分,我想从以下文本中删除:

<dd>
<span class="signpost-site" data-site="news">News
</span>
<span class="signpost-section">Europe
</span>
</dd>

在这种情况下,我想要&#34;欧洲&#34;

有时是

<span class="signpost-section"> 

缺少,而是

<dd>
<span class="signpost-site" data-site="news">News
</span>
</dd>

在这种情况下,我想&#34;&#34;

目的是创建一个csv并确保每篇文章在正确的索引号处都有正确的标记。

目前我的代码是

response.xpath('//footer//dd/span[@class="signpost-section"]/text()').extract()

仅获取现有标签。我不确定如何检查

<span class="signpost-section">

存在于

response.xpath('//footer//dd/span[@class="signpost-site"])

理想情况下,我想要一些符合

的内容
if  <span class="signpost-section"> (exists in) response.xpath('//footer//dd/span[@class="signpost-site"])
then
response.xpath('//footer//dd/span[@class="signpost-section"]/text()').extract()
else ""

1 个答案:

答案 0 :(得分:1)

我只会将.extract_first()与指定的默认值一起使用(在不匹配时使用):

response.xpath('//footer//dd/span[@class="signpost-section"]/text()').extract_first(default='')