def parse_item(self, response): item = self.configs.get('item') if item: cls = eval(item.get('class'))() loader = eval(item.get('loader'))(cls,response=response) print('loader:' + str(type(loader))) #动态获取属性配置 for key,value in item.get('attrs').items(): for extractor in value: if extractor.get('mothod') == 'xpath': loader.add_xpath(key,*extractor.get('args'),**{'re':extractor.get('re')}) if extractor.get('mothod') == 'css': loader.add_css(key, *extractor.get('args'), **{'re': extractor.get('re')}) if extractor.get('mothod') == 'value': loader.add_value(key, *extractor.get('args'), **{'re': extractor.get('re')}) if extractor.get('mothod') == 'attr': loader.add_value(key, getattr(response,*extractor.get('args'))) yield loader.load_item()
2018-12-10 14:26:33 [scrapy.core.scraper] ERROR: Spider error processing <GET http://global.eastmoney.com/a/201812101002405673.html> (referer: http://stock.eastmoney.com/news/chstpyl.html)
Traceback (most recent call last):
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\utils\defer.py", line 102, in iter_errback
yield next(it)
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 30, in process_spider_output
for x in result:
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 339, in
return (_set_referer(r) for r in result or ())
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in
return (r for r in result or () if _filter(r))
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in
return (r for r in result or () if _filter(r))
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\spiders\crawl.py", line 78, in parse_response
for requests_or_item in iterate_spider_output(cb_res):
File "E:\Anaconda3\project\Spiders\EastmoneyCrawl\EastmoneyCrawl\spiders\univer.py", line 48, in parse_item
yield loader.load_item()
File "d:\ProgramData\Anaconda3\lib\site-packages\scrapy\loader_init.py", line 117, in load_item
item[field_name] = value
TypeError: 'NewsLoader' object does not support item assignment