Với Scrapy, chúng ta có thể có nhiều spider trong một dự án. Bài viết dưới đây hướng dẫn các chạy nối tiếp các spider trong một dự án.
Mã nguồn dưới đây gồm 2 spider:
Spider 1 là geturl_spd là spider để lấy dữ liệu url của sản phẩm
Spider 2 là getdetail_spd là spider để lấy chi tiết sản phẩm từ url được lấy bởi spider 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from twisted.internet import reactor, defer from scrapy.crawler import CrawlerRunner from scrapy.utils.log import configure_logging from datascraper.spiders.geturl_spd import Shopritepider from datascraper.spiders.getdetail_spd import ShopriteDetailSpdSpider import datetime from scrapy.utils.project import get_project_settings configure_logging() config = get_project_settings() runner = CrawlerRunner(settings=config) @defer.inlineCallbacks def crawl(key): yield runner.crawl(Shopritepider, scraped_key=key) yield runner.crawl(ShopriteDetailSpdSpider, scraped_key=key) reactor.stop() key = datetime.datetime.now().strftime("%Y%m%d") print('craw with scraped_key: {}'.format(key)) crawl(key) reactor.run() # the script will block here until the last crawl call is finished |
Mình là một lập trình viên tự do với hơn 10 năm kinh nghiệm. Mình chuyên về Web scraping, Web automation, Python, Django