当我使用scrapy item_loader填充项目时,选择器提取数据为None。然后,我使用mysql来保存数据,但它给了我一个错误:key Error,原因是这个实例没有这个键。在我研究之后,没有解决方案。你可以帮帮我吗?非常感谢你!
real_time_hot_loader = WeiBoRealTimeHotLoader(item=WeiBORealTimeHotItem(),selector=real_time_hot_node)
real_time_hot_loader.add_css('search_rank', 'tr[action-type*="hover"] td.td_01 span em::text')
real_time_hot_loader.add_css('star_name', 'td.td_02 p.star_name a::text')
real_time_hot_loader.add_css('star_url', 'td.td_02 p.star_name a::attr(href)')
real_time_hot_loader.add_css('star_num', 'td.td_03 p.star_num span::text')
real_time_hot_loader.add_css('hot_txt','td.td_02 p.star_name i.icon_txt::text')
real_time_hot_loader.add_value('update_time', time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
real_time_hot_loader.add_value('id', real_time_hot_date_time_id)
real_time_hot_item = real_time_hot_loader.load_item()
答案 0 :(得分:2)
默认情况下,scrapy的ItemLoader会丢弃None
要解决此问题,您需要确保加载程序回退到其他值,例如空字符串:""
from scrapy.loader import ItemLoader
from scrapy.loader.processors import Compose
def or_empty_string(value):
return value or ''
class MyLoader(ItemLoader):
default_output_processor = Compose(or_empty_string)
现在你可以看到这个:
>>> l = MyLoader()
>>> l.add_value('foo', None)
>>> l.load_item()
{}
>>> l.add_value('foo', '')
>>> l.load_item()
{'foo': ['']}