Интеграция Selenium со Scrapy для динамических страниц
При парсинге сложных веб-сайтов с динамическим контентом можно интегрировать Selenium, платформу веб-автоматизации, с Scrapy, фреймворк для парсинга веб-страниц, позволяющий преодолевать трудности.
Интеграция Selenium в Scrapy Spider
Чтобы интегрировать Selenium в Scrapy Spider, инициализируйте Selenium WebDriver в Scrapy Spider. __init__ метод.
import scrapy from selenium import webdriver class ProductSpider(scrapy.Spider): name = "product_spider" allowed_domains = ['example.com'] start_urls = ['http://example.com/shanghai'] def __init__(self): self.driver = webdriver.Firefox()
Затем перейдите к URL-адресу в методе синтаксического анализа и используйте методы Selenium для взаимодействия со страницей.
def parse(self, response): self.driver.get(response.url) next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') next.click()
Используя этот подход, вы можете моделировать взаимодействие с пользователем, перемещаться по динамическим страницам и извлекать нужные данные.
Альтернатива использованию Selenium со Scrapy
В некоторых сценариях использования промежуточного программного обеспечения ScrapyJS может быть достаточно для обработки динамических частей страницы без использования Selenium. Например, см. следующий пример:
# scrapy.cfg DOWNLOADER_MIDDLEWARES = { 'scrapyjs.SplashMiddleware': 580, }
# my_spider.py class MySpider(scrapy.Spider): name = 'my_spider' start_urls = ['http://example.com/dynamic'] def parse(self, response): script = 'function() { return document.querySelectorAll("div.product-info").length; }' return Request(url=response.url, callback=self.parse_product, meta={'render_javascript': True, 'javascript': script}) def parse_product(self, response): product_count = int(response.xpath('//*[@data-scrapy-meta]/text()').extract_first())
Этот подход использует рендеринг JavaScript с использованием ScrapyJS для получения желаемых данных без используя Selenium.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3