我的列表中有两个项目存在或不存在。如何写清单支票?
物品看起来像这样
item['BusinessType'] = response.xpath('//div//following-sibling::p//text()').extract()[3]
item['BusinessArea'] = response.xpath('//div//following-sibling::p//text()').extract()[4]
有时列表成员[3]或[4]不存在,因此Scrapy失败并
IndexError: list index out of range
我尝试了几种不同的方法,但是每种方法都失败了。我不懂为什么。将response.xpath指定为局部变量并使用
进行检查 if biz_type:
item['BusinessType'] = biz_type
else:
biz_type_none = "None"
item['BusinessType'] = biz_type_none
if biz_area:
item['BusinessArea'] = biz_area
else:
biz_area_none = "None"
item['BusinessArea'] = biz_area_none
失败。 Scrapy抱怨列表仍然超出范围。
如何在列表提取过程中进行正确的检查?
编辑:下面的全部功能。这是“链”中的最后一个功能。它在之前的步骤中访问了3页,并使用meta传递了项目。
def trust_data(self, response):
item = response.meta['item']
item ['Access'] = response.xpath('//div//following-sibling::p//text()').extract()[1]
item ['Feedback'] = response.xpath('//div//following-sibling::p//text()').extract()[2]
texts = response.xpath('//div//following-sibling::p//text()').get()
if len(texts) >= 4:
item['BusinessType'] = texts[3]
if len(texts) >= 5:
item['BusinessArea'] = texts[4]
yield item
另一件事,
print(texts, 'lenght is', len(texts))
(u'5600', 'lenght is', 4)
长度== 4,列表已完成
>>> print(texts, 'lenght is', len(texts))
(u'0', 'lenght is', 1)
长度== 1,列表不完整(它没有要包含在商品中的标签)
但是条件
if len(texts) == 1
总是很满意,接下来我想做的所有事情都将完成。示例:
if len(texts) == 4:
if len(texts) >= 4:
item['BusinessType'] = texts[3]
if len(texts) >= 5:
item['BusinessArea'] = texts[4]
else:
item['BusinessType'] = "None"
item['BusinessArea'] = "None"
在所有可能的情况下,这两个项目都用“无”填充。
答案 0 :(得分:0)
在访问索引之前,请确保相应的列表足够长:
texts = response.xpath('//div//following-sibling::p//text()').getall()
item['BusinessType'] = texts[3] if len(texts) >= 4 else 'None'
item['BusinessArea'] = texts[4] if len(texts) >= 5 else 'None'