Scrapy - 迭代对象

时间:2016-09-27 18:24:35

标签: python scrapy iteration

这就是我从scrapy脚本运行Python的方式:

def iterate():

    process = CrawlerProcess(get_project_settings())

    tracks = process.crawl('pitchfork_tracks', domain='pitchfork.com')

    process.start() 

但是,iterate似乎response似乎不是dict,这种方式是{'track': [u'\u201cAnxiety\u201d', u'\u201cLockjaw\u201d [ft. Kodak Black]', u'\u201cMelanin Drop\u201d', u'\u201cDreams\u201d', u'\u201cIntern\u201d', u'\u201cYou Don\u2019t Think You Like People Like Me\u201d', u'\u201cFirst Day Out tha Feds\u201d', u'\u201cFemale Vampire\u201d', u'\u201cGirlfriend\u201d', u'\u201cOpposite House\u201d', u'\u201cGirls @\u201d [ft. Chance the Rapper]', u'\u201cI Am a Nightmare\u201d']}

iterate

我如何response通过此object?据我所知,到目前为止,响应是def start_requests(self): for x in xrange(8): random_form_page = session.query(.... PR = Request( 'htp://my-api', headers=self.headers, meta={'newrequest': Request(random_form_page, headers=self.headers)}, callback=self.parse_PR, dont_filter = True ) yield PR ,因此是不可迭代的。

1 个答案:

答案 0 :(得分:0)

您应该遵循Scrapy Framework的工作流程。 Spider处理如何构建请求以及解析响应。 ItemPipeline处理项目的操作方式。

从你的代码:

tracks = process.crawl('pitchfork_tracks', domain='pitchfork.com')

pitchfork_tracks是项目中的蜘蛛名称。所以你应该在蜘蛛中处理响应的迭代,并在itempipeline中做进一步的操作。对于ItemPipeline部分,您需要手动配置scrapy脚本的设置。从脚本方法common practice-run from script

检查运行scrapy的文档

顺便说一句,根据文档CrawlerProcess

tracks = process.crawl(' pitchfork_tracks',domain =' pitchfork.com')

tracks是一个扭曲defer对象,并且此对象不可迭代。除非您熟悉twist和Scrapy内部部分,否则您最好遵循Scrapy框架的工作流程。

感谢。