这就是我从Python脚本运行scrapy的方式:
def iterate():
process = CrawlerProcess(get_project_settings())
tracks = process.crawl('pitchfork_tracks', domain='pitchfork.com')
process.start() 然而,我似乎不能通过response进行iterate,它是一种这样的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']}如何通过此response执行iterate操作?据我所知,到目前为止,响应是一个object,因此是不可迭代的。
发布于 2016-09-28 03:24:45
你应该遵循Scrapy Framework的工作流程。Spider处理如何构建请求和解析响应。ItemPipeline处理项目的操作方式。
从你的代码中:
tracks = process.crawl('pitchfork_tracks', domain='pitchfork.com')pitchfork_tracks是项目中的爬行器名称。因此,您应该在爬行器中处理响应的迭代,并在itempipeline中进行进一步的操作。对于ItemPipeline部件,您需要手动配置scrapy脚本的设置。检查文档以从script approaches common practice-run from script运行scrapy
顺便说一句,根据CrawlerProcess的文件,
tracks = process.crawl('pitchfork_tracks',domain='pitchfork.com')
tracks是一个扭曲的defer对象,这个对象是不可迭代的。除非你熟悉twist和Scrapy的内部部分,否则你最好遵循Scrapy框架的工作流程。
谢谢。
https://stackoverflow.com/questions/39731804
复制相似问题