【发布时间】:2020-02-18 20:52:33
【问题描述】:
我从 Python 脚本调用 Scrapy Spider。我想访问 Spider 从我的脚本中生成的项目。但我不知道该怎么做。
脚本工作正常,蜘蛛被调用并产生正确的项目,但我不知道如何从我的脚本中访问这些项目。
这是脚本的代码
Class UASpider(scrapy.Spider):
name = 'uaspider'
start_urls = ['http://httpbin.org/user-agent']
def parse(self, response):
payload = json.loads(response.body.decode(response.encoding))
yield {'ua':payload}
def main():
process = CrawlerProcess(get_project_settings())
process.crawl(UASpider)
process.start() # the script will block here until the crawling is finished
if (__name__ == '__main__'):
main()
这是显示蜘蛛工作正常并产生项目的日志部分。
2020-02-18 20:44:10 [scrapy.core.engine] INFO: Spider opened
2020-02-18 20:44:10 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-02-18 20:44:10 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-02-18 20:44:10 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/user-agent> (referer: None)
2020-02-18 20:44:10 [scrapy.core.scraper] DEBUG: Scraped from <200 http://httpbin.org/user-agent>
{'ua': {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}}
2020-02-18 20:44:10 [scrapy.core.engine] INFO: Closing spider (finished)
非常感谢您的帮助!!
我能想到的一个选择是创建一个存储项目的管道,然后从该存储中访问项目:
- 为此,我需要在脚本中配置管道(而不是在项目设置中)。
- 另外,最好存储在变量而不是文件中(我这样做是为了自动化测试,速度很重要)。
【问题讨论】:
-
你想在哪里使用你的输出如果它在蜘蛛中你可以很容易地将它放在
meta并传递它,如果它在你之后main()你可以使用蜘蛛作为生成器并使用您从那里获得的输出。话虽这么说,您已经可以通过使用网站从response.request.headers['User-Agent']访问您的用户代理 -
在遇到类似问题时,我使用了一个管道:gitlab.com/gallaecio/versiontracker/-/blob/master/…
-
@wishmaster - 我想使用
main()之后的输出。我会在通话中保持我的项目设置的效果吗? (例如,如果我配置一个默认用户代理,我希望该用户代理)。 - 我如何将蜘蛛用作发电机?您可以粘贴一些代码示例吗? - 谢谢!!