"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن دمج السيلينيوم مع Scrapy لكشط الصفحات الديناميكية؟

كيف يمكن دمج السيلينيوم مع Scrapy لكشط الصفحات الديناميكية؟

تم النشر بتاريخ 2024-11-19
تصفح:446

How can Selenium be Integrated with Scrapy to Scrape Dynamic Pages?

دمج السيلينيوم مع 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