У меня здесь интересная проблема. Я пишу веб-скребок Scrapy, чтобы получить продукты с веб-сайта. Страницы каталога используют ленивую загрузку, что означает, что я не могу получить больше, чем первые 12 предметов, или использую нумерацию страниц, используя Scrapy по умолчанию. Я начал использовать Selenium с безголовым chrome клиентом, чтобы прокручивать страницу вручную для получения данных.
Я прочитал в Интернете, что использование Scrapy + Selenium означает, что я не могу выполнять запросы Scrapy одновременно, что прискорбно, потому что подавляющее большинство моих запросов не требует Selenium. Мое промежуточное программное обеспечение Selen проверяет свойство request.meta, чтобы выяснить, нужно ли ему что-либо делать, в противном случае оно просто возвращает None. Однако все запросы фильтруются через промежуточное ПО.
Мой вопрос таков: есть ли способ разрешить одновременное выполнение запросов, которым НЕ требуется Selenium?
Мое промежуточное ПО:
def __init__(self):
options = Options()
options.add_argument("--headless")
self.driver = webdriver.Chrome("path/to/driver", chrome_options=options)
def process_request(self, request, spider):
if request.meta.get("selenium"):
self.driver.get(request.url)
... # Perform selinium scroll logic and return body
return None
Функция анализа моего паука:
def parse(self, response):
meta = {"otherMetaData": "data", "selenium": True}
... # Obtain link to catalog page
yield response.follow(page_link, callback=self.parseProducts, meta=meta)
def parseProducts(self, response):
... # Obtain links to product pages
response.meta.pop("selenium")
yield response.follow(page_link, callback=self.parseProductPage, response.meta)
РЕДАКТИРОВАТЬ: Форматирование