Я пытаюсь почистить страницы интернет-магазина с помощью функции поиска. Например, когда на URL-адрес www.example.com/search отправляется запрос, страница возвращает разбитый на страницы список ссылок на все продукты веб-сайта. Каждая страница продукта более или менее одинакова и, как таковая, относительно проста в очистке. Проблема в том, что возвращено около 40 000 ссылок на страницы продуктов, и я хочу очистить их все, сначала загрузив базу данных, а затем запланировав ежедневный запуск скребка для добавления любых новых продуктов. Я хочу знать, каков был бы эффективный подход к эффективной очистке этих 40000 страниц с помощью скрапа. Прямо сейчас мой код выглядит следующим образом:
ExampleSpider(scrapy.Spider):
next_page = 1
last_page = 100
start_urls = ['example.com/search?page={}'.format(next_page)]
parse(self, response):
yield scrapy.Request(response.url, callback=self.follow_product_links)
yield scrapy.Request(response.url, callback=self.follow_pagination_links)
follow_product_links(self,response):
for href in selector_that_gets_all_the_product_links:
yield response.follow(href, callback=self.parse_product)
parse_product(self,response):
# Scrape the product page and yield an item
# details are not relevant to my problem
follow_pagination_links(self,response):
self.next_page += 1
if self.next_page < self.last_page:
url = 'example.com/search?page={}'.format(self.next_page)
scrapy.Request(url, callback=self.parse)
Это не исполняемый код, но он должен дать вам представление о том, что я пытаюсь сделать. Я знаю, что Scrapy асинхронный, что, безусловно, должно помочь, но есть ли какие-нибудь лучшие методы, которые я мог бы использовать? Кроме того, я надеялся, что веб-сайт предоставит публичный API для запросов к своей базе данных, но, к сожалению, они этого не делают.