本节记录使用Scrapy时的常见做法。这些内容涵盖了许多主题,通常不属于任何其他特定部分。 从脚本中运行Scrapy¶你可以使用 API 从脚本运行scrapy,而不是运行scrapy via的典型方式 记住,scrappy构建在TwistedAsynchronicNetworkLibrary之上,所以需要在TwistedReactor中运行它。 你能用来运行蜘蛛的第一个工具是 下面是一个示例,演示如何使用它运行单个蜘蛛。 import scrapy
from scrapy.crawler import CrawlerProcess
class MySpider(scrapy.Spider):
# Your spider definition
...
process = CrawlerProcess(settings={
"FEEDS": {
"items.json": {"format": "json"},
},
})
process.crawl(MySpider)
process.start() # the script will block here until the crawling is finished
在CrawlerProcess中定义字典中的设置。一定要检查 如果您在一个零碎的项目中,有一些额外的帮助器可以用来导入项目中的那些组件。你可以自动输入蜘蛛的名字 下面是一个如何使用 testspiders 以项目为例。 from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
process = CrawlerProcess(get_project_settings())
# 'followall' is the name of one of the spiders of the project.
process.crawl('followall', domain='scrapy.org')
process.start() # the script will block here until the crawling is finished
还有另一个Scrapy实用程序,它提供了对爬行过程的更多控制: 使用这个类,在调度spider之后应该显式地运行reactor。建议您使用 请注意,蜘蛛完成后,您还必须自己关闭扭曲的反应堆。这可以通过将回调添加到由 下面是一个使用它的例子,以及在 from twisted.internet import reactor
import scrapy
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
class MySpider(scrapy.Spider):
# Your spider definition
...
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
runner = CrawlerRunner()
d = runner.crawl(MySpider)
d.addBoth(lambda _: reactor.stop())
reactor.run() # the script will block here until the crawling is finished
参见 Reactor Overview |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-12-5 23:41 , Processed in 1.160119 second(s), 17 queries .