这就是我从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
,因此是不可迭代的。
答案 0 :(得分:0)
您应该遵循Scrapy Framework的工作流程。 Spider处理如何构建请求以及解析响应。 ItemPipeline处理项目的操作方式。
从你的代码:
tracks = process.crawl('pitchfork_tracks', domain='pitchfork.com')
pitchfork_tracks
是项目中的蜘蛛名称。所以你应该在蜘蛛中处理响应的迭代,并在itempipeline中做进一步的操作。对于ItemPipeline部分,您需要手动配置scrapy脚本的设置。从脚本方法common practice-run from script
顺便说一句,根据文档CrawlerProcess,
tracks = process.crawl(' pitchfork_tracks',domain =' pitchfork.com')
tracks
是一个扭曲defer
对象,并且此对象不可迭代。除非您熟悉twist和Scrapy内部部分,否则您最好遵循Scrapy框架的工作流程。
感谢。