Python Scrapy-当其中一个项目字段未返回时处理异常
我正在尝试解析零碎的条目,其中每个条目都有几个字段。由于站点上的信息不完整,某些字段可能无法正确捕获。如果只有一个字段无法返回,则提取项目的整个操作将中断,并出现异常(例如,对于下面的代码,我得到“Attribute:None cannot split”)。然后解析器移动到下一个请求,而不捕获其他可用字段Python Scrapy-当其中一个项目字段未返回时处理异常,python,exception-handling,web-scraping,scrapy,Python,Exception Handling,Web Scraping,Scrapy,我正在尝试解析零碎的条目,其中每个条目都有几个字段。由于站点上的信息不完整,某些字段可能无法正确捕获。如果只有一个字段无法返回,则提取项目的整个操作将中断,并出现异常(例如,对于下面的代码,我得到“Attribute:None cannot split”)。然后解析器移动到下一个请求,而不捕获其他可用字段 item['prodcode'] = response.xpath('//head/title').re_first(r'.....').split(" ")[1] #throws: Attr
item['prodcode'] = response.xpath('//head/title').re_first(r'.....').split(" ")[1]
#throws: Attribute:None cannot be split . Does not parse other fields.
Scrapy如何处理此类异常?我想从所有可用字段中检索信息,而不可用字段返回空白或N/a。我可以尝试。。。除了在每个项目字段上,但这似乎不是最佳解决方案。文档中提到了异常处理,但不知何故,我找不到解决这种情况的方法。这里最简单的方法是遵循规范,直接在spider中处理异常。例如:
try:
item['prodcode'] = response.xpath('//head/title').re_first(r'.....').split(" ")[1]
except AttributeError:
item['prodcode'] = 'n/a'
这里一个更好的选择是将项字段解析逻辑委托给和不同的对象。因此,您的spider将只负责解析HTML和提取所需的数据,但所有的后处理和修饰都将由项目加载器处理。换句话说,在你的蜘蛛中,你只有:
loader = MyItemLoader(response=response)
# ...
loader.add_xpath("prodcode", "//head/title", re=r'.....')
# ...
loader.load_item()
项目加载器的内容如下:
def parse_title(title):
try:
return title.split(" ")[1]
except Exception: # FIXME: handle more specific exceptions
return 'n/a'
class MyItemLoader(ItemLoader):
default_output_processor = TakeFirst()
prodcode_in = MapCompose(parse_title)
你能用一个例子来发布更多的代码吗?抱歉,James,这在中间得到了回答。谢谢