دمج السيلينيوم مع Scrapy للصفحات الديناميكية
عند استخراج مواقع الويب المعقدة ذات المحتوى الديناميكي، يمكن دمج السيلينيوم، وهو إطار عمل لأتمتة الويب، مع Scrapy، إطار عمل لتجميع الويب، للتغلب على التحديات.
دمج السيلينيوم في Scrapy Spider
لدمج السيلينيوم في عنكبوت Scrapy الخاص بك، قم بتهيئة Selenium WebDriver ضمن طريقة __init__ الخاصة بالعنكبوت.import سكرابي من برنامج تشغيل الويب الخاص باستيراد السيلينيوم فئة ProductSpider (scrapy.Spider): الاسم = "product_spider" المسموح_المجالات = ['example.com'] start_urls = ['http://example.com/shanghai'] تعريف __init__(الذات): self.driver = webdriver.Firefox()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 ضمن طريقة التحليل واستخدم أساليب السيلينيوم للتفاعل مع الصفحة.def parse(self, Response): self.driver.get(response.url) next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a') next.click()
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()باستخدام هذا الأسلوب، يمكنك محاكاة تفاعلات المستخدم، والتنقل في الصفحات الديناميكية، واستخراج البيانات المطلوبة.
بديل لاستخدام السيلينيوم مع Scrapy
في بعض السيناريوهات، قد يكون استخدام البرنامج الوسيط ScrapyJS كافيًا للتعامل مع الأجزاء الديناميكية من الصفحة دون الاعتماد على السيلينيوم. على سبيل المثال، راجع المثال التالي:#scrapy.cfg DOWNLOADER_MIDDLEWARES = { 'scrapyjs.SplashMiddleware': 580،
# 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())
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3