Integration von Selenium mit Scrapy für dynamische Seiten
Beim Scraping komplexer Websites mit dynamischen Inhalten kann Selenium, ein Web-Automatisierungs-Framework, integriert werden Scrapy, ein Web-Scraping-Framework zur Bewältigung von Herausforderungen.
Integration von Selenium in ein Scrapy Spider
Um Selenium in Ihren Scrapy-Spider zu integrieren, initialisieren Sie den Selenium-WebDriver in der __init__-Methode des Spiders.
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()
Navigieren Sie als Nächstes zur URL innerhalb der Parse-Methode und verwenden Sie Selenium-Methoden, um mit der Seite zu interagieren.
def parse(self, response): self.driver.get(response.url) next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') next.click()
Mit diesem Ansatz können Sie Benutzerinteraktionen simulieren, durch dynamische Seiten navigieren und die gewünschten Daten extrahieren.
Alternative zur Verwendung von Selenium mit Scrapy
In bestimmten Szenarien kann die Verwendung der ScrapyJS-Middleware ausreichen, um dynamische Teile einer Seite zu verarbeiten, ohne auf Selenium angewiesen zu sein. Sehen Sie sich zum Beispiel das folgende Beispiel an:
# 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())
Dieser Ansatz verwendet JavaScript-Rendering mit ScrapyJS, um die gewünschten Daten ohne zu erhalten mit Selen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3