#python #web-scraping #scrapy
#питон #соскабливание паутины #скребок
Вопрос:
Я сделал скребковый код, в котором 4 сканера очищают данные с 4 разных веб-сайтов электронной коммерции. Для каждого искателя я хочу вывести 5 продуктов с самыми низкими ценами с каждого веб-сайта и экспортировать их в один CSV-файл.
Прямо сейчас мой основной код выглядит так:
process = CrawlerProcess() process.crawl(Crawler1) process.crawl(Crawler2) process.crawl(Crawler3) process.crawl(Crawler4) process.start()
Я хочу, чтобы каждый искатель возвращал список словарей, чтобы я мог перебирать его с помощью цикла for и сравнивать цены.
Нужно ли для этого использовать конвейер Scrapy? Как я могу сделать так, чтобы Scrapy возвращал список очищенных элементов(который находится в словаре) вместо того, чтобы просто экспортировать их в файл?
Ответ №1:
Вот пример с каким-то пауком из другого поста, я передал имя паука функции, но вы можете настроить его в соответствии с вашими потребностями:
from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings from scrapy.signalmanager import dispatcher from scrapy import signals def spider_output(spider): output = [] def get_output(item): output.append(item) dispatcher.connect(get_output, signal=signals.item_scraped) settings = get_project_settings() settings['USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' process = CrawlerProcess(settings) process.crawl(spider) process.start() return output if __name__ == "__main__": spider = 'vdsc' print(spider_output(spider))