
Emma Foster
Machine Learning Engineer

Scrapy-Playwright एक मिडलवेयर है जो Scrapy, Python के लिए एक तेज़ और शक्तिशाली वेब स्क्रैपिंग फ़्रेमवर्क, को Playwright, एक ब्राउज़र ऑटोमेशन लाइब्रेरी के साथ एकीकृत करता है। यह संयोजन Scrapy को Playwright की गतिशील सामग्री को प्रस्तुत करने, वेब पेजों के साथ इंटरैक्ट करने और ब्राउज़र संदर्भों को निर्बाध रूप से प्रबंधित करने की क्षमता का लाभ उठाकर जावास्क्रिप्ट-भारी वेबसाइटों को संभालने की अनुमति देता है।
जबकि Scrapy स्थिर वेबसाइटों को स्क्रैप करने के लिए उत्कृष्ट है, कई आधुनिक वेबसाइटें सामग्री को गतिशील रूप से प्रस्तुत करने के लिए जावास्क्रिप्ट पर बहुत अधिक निर्भर करती हैं। पारंपरिक Scrapy स्पाइडर इन साइटों से जूझ सकते हैं, अक्सर महत्वपूर्ण डेटा गायब होते हैं या जटिल पृष्ठ संरचनाओं को नेविगेट करने में विफल रहते हैं। Scrapy-Playwright इस अंतर को पाटता है, जिससे Scrapy एक हेडलेस ब्राउज़र को नियंत्रित करने में सक्षम होता है, यह सुनिश्चित करता है कि सभी गतिशील सामग्री पूरी तरह से लोड हो गई है और स्क्रैपिंग के लिए सुलभ है।
Scrapy-Playwright के साथ शुरुआत करने के लिए, आपको Scrapy और Playwright दोनों को स्थापित करना होगा। यहां बताया गया है कि आप अपने वातावरण को कैसे सेट कर सकते हैं:
Scrapy स्थापित करें:
pip install scrapy
Scrapy-Playwright स्थापित करें:
pip install scrapy-playwright
Playwright ब्राउज़र स्थापित करें:
Playwright स्थापित करने के बाद, आपको आवश्यक ब्राउज़र बाइनरी स्थापित करने की आवश्यकता है।
playwright install
सबसे पहले, यदि आपने पहले से नहीं किया है, तो एक नया Scrapy प्रोजेक्ट बनाएँ:
scrapy startproject myproject
cd myproject
अगला, आपको अपने Scrapy प्रोजेक्ट की सेटिंग में Playwright को सक्षम करना होगा। settings.py खोलें और निम्नलिखित कॉन्फ़िगरेशन जोड़ें:
# settings.py
# Playwright डाउनलोडर मिडलवेयर को सक्षम करें
DOWNLOADER_MIDDLEWARES = {
'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
}
# HTTP और HTTPS के लिए डाउनलोड हैंडलर निर्दिष्ट करें
DOWNLOAD_HANDLERS = {
'http': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
'https': 'scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler',
}
# Playwright सेटिंग्स को सक्षम करें
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'
# Playwright सेटिंग्स (वैकल्पिक)
PLAYWRIGHT_BROWSER_TYPE = 'chromium' # 'chromium', 'firefox', या 'webkit' हो सकता है
PLAYWRIGHT_LAUNCH_OPTIONS = {
'headless': True,
}
सेटअप पूरा होने के बाद, आइए एक साधारण स्पाइडर बनाएँ जो एक जावास्क्रिप्ट-प्रस्तुत वेबसाइट को स्क्रैप करने के लिए Playwright का उपयोग करता है। उदाहरण के लिए, हम एक काल्पनिक साइट को स्क्रैप करेंगे जो सामग्री को गतिशील रूप से लोड करती है।
spiders निर्देशिका के अंदर एक नया स्पाइडर फ़ाइल dynamic_spider.py बनाएँ:
# spiders/dynamic_spider.py
import scrapy
from scrapy_playwright.page import PageCoroutine
class DynamicSpider(scrapy.Spider):
name = "dynamic"
start_urls = ["https://example.com/dynamic"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "div.content"),
],
},
)
async def parse(self, response):
# जावास्क्रिप्ट द्वारा सामग्री प्रस्तुत करने के बाद डेटा निकालें
for item in response.css("div.content"):
yield {
"title": item.css("h2::text").get(),
"description": item.css("p::text").get(),
}
# यदि आवश्यक हो तो पेजिनेशन या अतिरिक्त इंटरैक्शन को संभालें
ऊपर दिए गए उदाहरण में:
playwright: True: Scrapy को इस अनुरोध के लिए Playwright का उपयोग करने के लिए सूचित करता है।playwright_page_coroutines: Playwright के साथ किए जाने वाले कार्यों को निर्दिष्ट करता है। यहां, यह पार्सिंग से पहले यह सुनिश्चित करने के लिए एक चयनकर्ता div.content की प्रतीक्षा करता है कि गतिशील सामग्री लोड हो गई है।parse विधि: प्रतिक्रिया को प्रभावी ढंग से संभालने के लिए async क्षमताओं का लाभ उठाता है।वेब स्क्रैपिंग में महत्वपूर्ण चुनौतियों में से एक कैप्चा से निपटना है, जिन्हें स्वचालित पहुंच को रोकने के लिए डिज़ाइन किया गया है। CapSolver एक मजबूत समाधान है जो कैप्चा-समाधान सेवाएँ प्रदान करता है, जिसमें Playwright जैसे ब्राउज़र ऑटोमेशन टूल के साथ एकीकरण शामिल है। इस खंड में, हम यह पता लगाएंगे कि कैप्चा को निर्बाध रूप से संभालने के लिए Scrapy-Playwright के साथ CapSolver को कैसे एकीकृत किया जाए।
CapSolver एक कैप्चा-समाधान सेवा है जो विभिन्न प्रकार के कैप्चा को हल करने की प्रक्रिया को स्वचालित करती है, जिसमें captcha और reCAPTCHA शामिल हैं। अपने स्क्रैपिंग वर्कफ़्लो के साथ CapSolver को एकीकृत करके, आप कैप्चा चुनौतियों को बायपास कर सकते हैं और मैनुअल हस्तक्षेप के बिना अपने स्क्रैपिंग कार्यों के प्रवाह को बनाए रख सकते हैं।
Scrapy-Playwright के साथ CapSolver को एकीकृत करने के लिए, आपको यह करना होगा:
नीचे Scrapy-Playwright के साथ CapSolver को एकीकृत करने के लिए चरण-दर-चरण मार्गदर्शिका दी गई है, जो उदाहरण कोड के साथ पूरी है।
सबसे पहले, CapSolver ब्राउज़र एक्सटेंशन डाउनलोड करें और इसे अपनी प्रोजेक्ट डायरेक्टरी में रखें। मान लें कि एक्सटेंशन CapSolver.Browser.Extension पर स्थित है।
./assets/config.json का पता लगाएँ।enabledForcaptcha को true पर सेट करें और स्वचालित समाधान के लिए captchaMode को token पर समायोजित करें।उदाहरण config.json:
{
"enabledForcaptcha": true,
"captchaMode": "token"
// अन्य सेटिंग्स समान रहती हैं
}
Playwright को CapSolver एक्सटेंशन लोड करने के लिए कॉन्फ़िगर करने के लिए अपनी settings.py को संशोधित करें। आपको एक्सटेंशन के लिए पथ निर्दिष्ट करना होगा और Playwright को आवश्यक तर्क पास करना होगा।
# settings.py
import os
from pathlib import Path
# मौजूदा Playwright सेटिंग्स
PLAYWRIGHT_BROWSER_TYPE = 'chromium'
PLAYWRIGHT_LAUNCH_OPTIONS = {
'headless': False, # एक्सटेंशन लोड करने के लिए गलत होना चाहिए
'args': [
'--disable-extensions-except={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
'--load-extension={}'.format(os.path.abspath('CapSolver.Browser.Extension')),
],
}
# सुनिश्चित करें कि ट्विस्टेड रिएक्टर सेट है
TWISTED_REACTOR = 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'
नोट: ब्राउज़र एक्सटेंशन लोड करने के लिए ब्राउज़र को गैर-हेडलेस मोड में चलने की आवश्यकता होती है। इसलिए, 'headless': False सेट करें।
CapSolver एक्सटेंशन का उपयोग करके कैप्चा के साथ इंटरैक्ट करने के लिए एक नया स्पाइडर बनाएँ या मौजूदा स्पाइडर को संशोधित करें।
# spiders/captcha_spider.py
import scrapy
from scrapy_playwright.page import PageCoroutine
import asyncio
class CaptchaSpider(scrapy.Spider):
name = "captcha_spider"
start_urls = ["https://site.example/captcha-protected"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "iframe[src*='captcha']"),
PageCoroutine("wait_for_timeout", 1000), # एक्सटेंशन को संसाधित करने के लिए प्रतीक्षा करें
],
"playwright_context": "default",
},
callback=self.parse_captcha
)
async def parse_captcha(self, response):
page = response.meta["playwright_page"]
# captcha चेकबॉक्स या फ़्रेम का पता लगाएँ और तदनुसार इंटरैक्ट करें
try:
# captcha iframe के उपलब्ध होने की प्रतीक्षा करें
await page.wait_for_selector("iframe[src*='captcha']", timeout=10000)
frames = page.frames
captcha_frame = None
for frame in frames:
if 'captcha' in frame.url:
captcha_frame = frame
break
if captcha_frame:
# captcha चेकबॉक्स पर क्लिक करें
await captcha_frame.click("div#checkbox")
# CapSolver द्वारा कैप्चा हल होने की प्रतीक्षा करें
await page.wait_for_selector("div.captcha-success", timeout=60000) # आवश्यकतानुसार चयनकर्ता को समायोजित करें
self.logger.info("Captcha solved successfully.")
else:
self.logger.warning("captcha iframe not found.")
except Exception as e:
self.logger.error(f"Error handling captcha: {e}")
# कैप्चा हल होने के बाद पृष्ठ को पार्स करने के साथ आगे बढ़ें
for item in response.css("div.content"):
yield {
"title": item.css("h2::text").get(),
"description": item.css("p::text").get(),
}
# यदि आवश्यक हो तो पेजिनेशन या अतिरिक्त इंटरैक्शन को संभालें
सुनिश्चित करें कि सभी निर्भरताएँ स्थापित हैं और अपने स्पाइडर को इस प्रकार चलाएँ:
scrapy crawl captcha_spider
एक बार जब आप मूल बातों से परिचित हो जाते हैं, तो Scrapy-Playwright आपके स्क्रैपिंग प्रोजेक्ट को बेहतर बनाने के लिए कई उन्नत सुविधाएँ प्रदान करता है।
कई पृष्ठों को स्क्रैप करना या किसी वेबसाइट के माध्यम से नेविगेट करना Playwright की नेविगेशन क्षमताओं का उपयोग करके सुव्यवस्थित किया जा सकता है।
# spiders/multi_page_spider.py
import scrapy
from scrapy_playwright.page import PageCoroutine
class MultiPageSpider(scrapy.Spider):
name = "multipage"
start_urls = ["https://example.com/start"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "div.list"),
PageCoroutine("evaluate", "window.scrollTo(0, document.body.scrollHeight)"),
],
},
)
async def parse(self, response):
# पहले पृष्ठ से डेटा निकालें
for item in response.css("div.list-item"):
yield {
"name": item.css("span.name::text").get(),
"price": item.css("span.price::text").get(),
}
# अगले पृष्ठ पर नेविगेट करें
next_page = response.css("a.next::attr(href)").get()
if next_page:
yield scrapy.Request(
response.urljoin(next_page),
callback=self.parse,
meta={
"playwright": True,
"playwright_page_coroutines": [
PageCoroutine("wait_for_selector", "div.list"),
],
},
)
Playwright कई ब्राउज़र संदर्भों के निर्माण की अनुमति देता है, जो सत्र, कुकीज़ या समानांतर स्क्रैपिंग कार्यों को संभालने के लिए उपयोगी हो सकते हैं।
# settings.py
PLAYWRIGHT_CONTEXTS = {
"default": {
"viewport": {"width": 1280, "height": 800},
"user_agent": "CustomUserAgent/1.0",
},
"mobile": {
"viewport": {"width": 375, "height": 667},
"user_agent": "MobileUserAgent/1.0",
"is_mobile": True,
},
}
अपने स्पाइडर में, संदर्भ निर्दिष्ट करें:
# spiders/context_spider.py
import scrapy
class ContextSpider(scrapy.Spider):
name = "context"
start_urls = ["https://example.com"]
def start_requests(self):
yield scrapy.Request(
self.start_urls[0],
meta={
"playwright": True,
"playwright_context": "mobile",
},
)
async def parse(self, response):
# आपका पार्सिंग तर्क यहां
pass
Scrapy-Playwright को पुनरावृत्ति, प्रॉक्सी प्रबंधन या कस्टम हेडर जैसे कार्यों को बेहतर बनाने के लिए अन्य मिडलवेयर के साथ एकीकृत किया जा सकता है।
# settings.py
DOWNLOADER_MIDDLEWARES.update({
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
'scrapy_playwright.middleware.ScrapyPlaywrightDownloadHandler': 543,
})
# कस्टम हेडर सेट करने का उदाहरण
DEFAULT_REQUEST_HEADERS = {
'User-Agent': 'MyCustomAgent/1.0',
'Accept-Language': 'en-US,en;q=0.9',
}
Scrapy-Playwright और CapSolver का अधिकतम लाभ उठाने के लिए, निम्नलिखित सर्वोत्तम प्रथाओं पर विचार करें:
CapSolver: scrape पर शीर्ष कैप्चा समाधानों के लिए अपना बोनस कोड प्राप्त करें। इसे रिडीम करने के बाद, आपको प्रत्येक रिचार्ज के बाद 5% अतिरिक्त बोनस मिलेगा, असीमित बार।

Scrapy-Playwright वेब स्क्रैपिंग के लिए एक गेम-चेंजर है, जो स्थिर और गतिशील सामग्री निष्कर्षण के बीच की खाई को पाटता है। Scrapy के मजबूत फ़्रेमवर्क और Playwright के उन्नत ब्राउज़र ऑटोमेशन की शक्ति का लाभ उठाकर, आप सबसे चुनौतीपूर्ण स्क्रैपिंग कार्यों को आसानी से निपटा सकते हैं। इसके अलावा, CapSolver को एकीकृत करने से आप कैप्चा चुनौतियों को दूर कर सकते हैं, यह सुनिश्चित करते हुए कि सबसे संरक्षित वेबसाइटों से भी निर्बाध डेटा संग्रह हो।
चाहे आप ई-कॉमर्स साइटों, सोशल मीडिया प्लेटफार्मों या किसी भी जावास्क्रिप्ट-भारी वेबसाइट को स्क्रैप कर रहे हों, Scrapy-Playwright CapSolver के साथ मिलकर आपको सफल होने के लिए आवश्यक उपकरण प्रदान करता है। सर्वोत्तम प्रथाओं का पालन करके और इन शक्तिशाली एकीकरणों का लाभ उठाकर, आप अपनी विशिष्ट आवश्यकताओं के अनुरूप कुशल, विश्वसनीय और स्केलेबल वेब स्क्रैपिंग समाधान बना सकते हैं।
अपने स्क्रैपिंग प्रोजेक्ट को ऊपर उठाना चाहते हैं? Scrapy-Playwright और CapSolver में गोता लगाएँ, और डेटा संग्रह और स्वचालन के लिए नई संभावनाओं को अनलॉक करें।
जानें कि क्लाउडफ़्लेयर एरर 1020 एक्सेस अस्वीकृत के क्या कारण होते हैं, कैसे वेब एप्लिकेशन फ़ायरवॉल और बॉट डिटेक्शन काम करते हैं, और विकासकर्ता कैसे वैध स्वचालन प्रक्रियाओं में गलत सकारात्मकों को कम कर सकते हैं।

सीखें कैसे कैपसॉल्वर n8n टेम्पलेट का उपयोग AWS WAF-सुरक्षित उत्पाद पृष्ठों को मॉनिटर करने, चुनौतियां हल करने, मूल्य निकालने, परिवर्तनों की तुलना करने और स्वचालित रूप से चेतावनियां ट्रिगर करने के लिए करें।
