使用scrapy ltem_loader add_css提取数据,但值为None,我该如何设置默认值

时间:2018-04-23 03:33:01

标签: python scrapy

当我使用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()

enter image description here

enter image description here

enter image description here

1 个答案:

答案 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': ['']}