अजगर के साथ अमेज़ॅन उत्पाद डेटा स्क्रैपिंग

टिप्पणियाँ: 0

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

अमेज़ॅन डेटा को खुरचने के लिए एक पायथन स्क्रिप्ट बनाना

अमेज़ॅन से डेटा को सफलतापूर्वक परिमार्जन करने के लिए, आप नीचे उल्लिखित संरचित एल्गोरिथ्म का पालन कर सकते हैं। यह विधि सुनिश्चित करती है कि आप आवश्यक जानकारी को कुशलता से और सटीक रूप से प्राप्त करें।

चरण 1 : अमेज़ॅन उत्पाद पृष्ठों पर HTTP अनुरोध भेजना:

  • HTTP GET अनुरोधों को शुरू करने के लिए अनुरोध लाइब्रेरी का उपयोग अमेज़ॅन उत्पाद पृष्ठों को लक्षित करने के लिए करें;
  • पार्सिंग के लिए तैयार करने के लिए HTTP प्रतिक्रिया से कच्चे HTML सामग्री को कैप्चर करें।

चरण 2 : HTML सामग्री को पार्स करना:

  • प्राप्त कच्चे HTML सामग्री को पार्स करने के लिए LXML लाइब्रेरी को नियुक्त करें;
  • उन विशिष्ट डेटा बिंदुओं का पता लगाने के लिए HTML का विश्लेषण करें जिन्हें आप निकालना चाहते हैं;
  • HTML संरचना से इन डेटा बिंदुओं को ठीक से लक्षित करने और निकालने के लिए XPath प्रश्नों को निष्पादित करें।

चरण 3 : डेटा का भंडारण:

  • आवश्यक डेटा निकालने के बाद, इसे CSV या JSON जैसे सुलभ प्रारूपों में सहेजने के लिए आगे बढ़ें, जो अन्य अनुप्रयोगों के साथ आसान विश्लेषण और एकीकरण की सुविधा प्रदान करते हैं।

संभावित बाधाओं को संभालना

अमेज़ॅन कनेक्शन की गति सीमाओं, कैप्चा एकीकरण और आईपी अवरुद्ध करने सहित स्क्रैपिंग प्रयासों में बाधा डालने के लिए कई उपायों को नियुक्त करता है। उपयोगकर्ता इन बाधाओं को दरकिनार करने के लिए काउंटरमेशर्स को अपना सकते हैं, जैसे कि उच्च गुणवत्ता वाले प्रॉक्सी का उपयोग करना।

व्यापक स्क्रैपिंग गतिविधियों के लिए, उन्नत पायथन तकनीकों को पर्याप्त मात्रा में उत्पाद डेटा की कटाई के लिए नियोजित किया जा सकता है। इन तकनीकों में हेडर स्टफिंग और टीएलएस फिंगरप्रिंटिंग शामिल हैं, जो पता लगाने और सफल डेटा निष्कर्षण को सुनिश्चित करने में मदद करते हैं।

इन चरणों को लेख के आने वाले खंडों में समझाया गया है जहां पायथन 3.12.2 का उपयोग करके इसका व्यावहारिक कार्यान्वयन देखा जाएगा

पूर्वापेक्षाएँ

एक वेब स्क्रैपिंग प्रोजेक्ट शुरू करने के लिए, हम HTML पार्सिंग के लिए LXML लाइब्रेरी का उपयोग करके एक बुनियादी स्क्रैपर सेट करके शुरू करेंगे और Amazon वेब सर्वर पर निर्देशित HTTP अनुरोधों को प्रबंधित करने के लिए अनुरोध लाइब्रेरी।

हमारा ध्यान अमेज़ॅन उत्पाद पृष्ठों से उत्पाद के नाम, कीमतें और रेटिंग जैसी आवश्यक जानकारी निकालने पर होगा। हम HTML को कुशलतापूर्वक पार्स करने और अनुरोधों को प्रबंधित करने के लिए तकनीकों का प्रदर्शन करेंगे, जो डेटा के सटीक और संगठित निष्कर्षण को सुनिश्चित करेंगे।

परियोजना निर्भरता को बनाए रखने और संघर्षों से बचने के लिए, इस वेब स्क्रैपिंग प्रयास के लिए एक अलग आभासी वातावरण बनाना उचित है। वर्चुअल वातावरण स्थापित करने के लिए "VENV" या "Pyenv" जैसे उपकरणों का उपयोग करने की सिफारिश की जाती है।

तृतीय-पक्ष पुस्तकालय स्थापित करें

आपको निम्नलिखित तृतीय-पक्ष अजगर पुस्तकालयों की आवश्यकता होगी:

1। requests

HTTP अनुरोध भेजने और वेब सामग्री को पुनः प्राप्त करने के लिए उपयोग किया जाता है। यह अक्सर वेब स्क्रैपिंग और वेब एपीआई के साथ बातचीत के लिए उपयोग किया जाता है।

स्थापना:

 pip install requests

2। lxml

XML और HTML दस्तावेजों को पार्सिंग और हेरफेर करने के लिए एक पुस्तकालय। यह अक्सर वेब स्क्रैपिंग और वेब पेजों से संरचित डेटा के साथ काम करने के लिए उपयोग किया जाता है।

स्थापना:

 pip install lxml

आवश्यक पुस्तकालयों का आयात

यहां हमें अपने स्क्रैपर को चलाने के लिए आवश्यक आवश्यक पुस्तकालयों को आयात करने की आवश्यकता है। जिसमें HTTP अनुरोधों को संभालने के लिए एक अनुरोध लाइब्रेरी, CSV फ़ाइल ऑपरेशन को संभालने के लिए CSV लाइब्रेरी, यादृच्छिक मान उत्पन्न करने के लिए यादृच्छिक लाइब्रेरी और यादृच्छिक विकल्प बनाने के लिए, कच्चे HTML सामग्री को पार्स करने के लिए LXML लाइब्रेरी, और टाइप इंटिंग के लिए तानाशाही और सूची।

 import requests
import csv
import random
from lxml import html
from typing import Dict, List

CSV फ़ाइल से इनपुट पढ़ना

निम्न कोड स्निपेट Amazon_product_urls.csv नाम की एक CSV फ़ाइल पढ़ता है जहां प्रत्येक पंक्ति में अमेज़ॅन उत्पाद पृष्ठ का URL होता है। कोड पंक्तियों पर पुनरावृत्ति करता है, प्रत्येक पंक्ति से URL को निकालता है और उन्हें URL नामक सूची में जोड़ता है।

 with open('amazon_product_urls.csv', 'r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        urls.append(row['url'])

HTTP अनुरोध हेडर और प्रॉक्सी

अनुरोध हेडर HTTP अनुरोधों में एक महत्वपूर्ण भूमिका निभाते हैं, जटिल ग्राहक प्रदान करते हैं और जानकारी का अनुरोध करते हैं। स्क्रैप करते समय, पता लगाने से बचने के लिए अधिकृत उपयोगकर्ता शीर्षक को कॉपी करना महत्वपूर्ण है और आसानी से अपनी जानकारी तक पहुंच सकता है। आमतौर पर उपयोग किए जाने वाले हेडर की नकल करके, स्क्रेपर्स का पता लगाने की तकनीकों से बच सकते हैं, यह सुनिश्चित करते हुए कि नैतिक मानकों को बनाए रखते हुए डेटा को लगातार निकाला जाता है।

प्रॉक्सी वेब स्क्रैपिंग में बिचौलियों के रूप में कार्य करता है, सर्वर का पता लगाने और अवरुद्ध करने से रोकने के लिए स्क्रैपर के आईपी पते को मास्किंग करता है। एक घूर्णन प्रॉक्सी आपको संभावित ब्लॉकों से बचने वाले एक नए आईपी पते के साथ प्रत्येक अनुरोध को भेजने की अनुमति देता है .. आवासीय या मोबाइल प्रॉक्सी का उपयोग वास्तविक मेजबान और प्रदाता का पता लगाने के कारण एंटी-स्क्रैपिंग उपायों के लिए लचीलापन को मजबूत करता है।

आईपी ​​एड्रेस प्राधिकरण के साथ अनुरोध हेडर और प्रॉक्सी सर्वर को एकीकृत करने के लिए कोड:

 headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'dnt': '1',
    'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
   }
proxies = {'http': '', 'https': ''}

UserAgent रोटेशन

यहां, हम उपयोगकर्ता एजेंट संग्रह की एक सूची बनाएंगे, जिसमें से प्रत्येक अनुरोध के लिए एक यादृच्छिक उपयोगकर्ता एजेंट चुना जाएगा। एक हेडर रोटेशन तंत्र को लागू करना, जैसे कि प्रत्येक अनुरोध के बाद उपयोगकर्ता-एजेंट को घुमाना, बॉट डिटेक्शन उपायों को दरकिनार करने में और सहायता कर सकता है।

 useragents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4591.54 Safari/537.36",
        "Mozilla/5.0 (Windows NT 7_0_2; Win64; x64) AppleWebKit/541.38 (KHTML, like Gecko) Chrome/105.0.1585 Safari/537.36",
        "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.7863.44 Safari/537.36"
    ]
headers['user-agent'] = random.choice(useragnets)

हेडर और प्रॉक्सी के साथ अमेज़ॅन के उत्पाद पृष्ठ के लिए HTTP अनुरोध करें

कस्टम हेडर के साथ एक निर्दिष्ट URL के लिए एक HTTP GET अनुरोध भेजता है, 30 सेकंड का टाइमआउट, और अनुरोध के लिए निर्दिष्ट प्रॉक्सी।

response = requests.get(url=url, headers=headers, proxies=proxies, timeout=30)

आवश्यक डेटा बिंदुओं के XPath/चयनकर्ताओं की पहचान करना

आवश्यक डेटा बिंदु: शीर्षक, मूल्य और रेटिंग। अब, आइए अपने संबंधित डेटा बिंदुओं के साथ स्क्रीनशॉट में दिखाए गए तत्वों के लिए संबंधित XPATH का निरीक्षण और पहचान करें।

नीचे दिया गया स्क्रीनशॉट Chrome DevTools की "Inspect" विशेषता का उपयोग करते हुए XPath `//span[@id="productTitle"]/text()` को खोजने के लिए दिखाता है, जिसका उपयोग Amazon उत्पाद पृष्ठ से उत्पाद शीर्षक निकालने के लिए किया जा रहा है।

1.png

निम्नलिखित स्क्रीनशॉट Amazon उत्पाद पृष्ठ से उत्पाद की कीमत निकालने के लिए XPath `//div[@id="corePrice_feature_div"]/div/div/span/span/text()` को खोजने का तरीका दिखाता है।

2.png

स्क्रीनशॉट Amazon उत्पाद पृष्ठ से उत्पाद की रेटिंग निकालने के लिए XPath `//span[@id="acrPopover"]/@title` को खोजने का तरीका दिखाता है।

3.png

एक शब्दकोश बनाएं जो एक वेबपेज से विशिष्ट जानकारी निकालने के लिए XPath अभिव्यक्ति प्रदान करता है: एक उत्पाद का शीर्षक, रेटिंग और मूल्य।

xpath_queries = {'title': '//span[@id="productTitle"]/text()', 'ratings': '//span[@id="acrPopover"]/@title', 'price': '//span[@class="a-offscreen"]/text()'}

HTML प्रतिक्रिया से LXML पार्सर बनाना

नीचे दिया गया कोड HTML सामग्री को Amazon Server को एक संरचित ट्री-जैसे प्रारूप में प्राप्त करने के लिए प्राप्त करता है, जो अपने तत्वों और विशेषताओं के आसान नेविगेशन और हेरफेर के लिए अनुमति देता है।

tree = html.fromstring(response.text)

आवश्यक डेटा निकालना

निम्न कोड स्निपेट एक XPATH क्वेरी का उपयोग करके पार्सड HTML ट्री से डेटा निकालता है और इसे एक निर्दिष्ट कुंजी के साथ एक शब्दकोश को असाइन करता है। स्ट्रिप () का उपयोग शुरुआत में व्हाट्सएप को हटाने के लिए किया जाता है और यदि कोई हो। यह XPATH क्वेरी के पहले परिणाम को पुनः प्राप्त करता है और इसे निकाले गए कुंजी के तहत एक्सट्रैक्टेड_डाटा डिक्शनरी में संग्रहीत करता है।

data = tree.xpath(xpath_query)[0].strip()
extracted_data[key] = data

निकाले गए डेटा को सीएसवी में सहेजना

निम्नलिखित कोड extracted_data शब्दकोश से CSV फ़ाइल को Product_data.csv नामक डेटा लिखता है। सुनिश्चित करें कि हेडर लाइन केवल तभी लिखी गई है जब फ़ाइल खाली हो। यदि फ़ाइल खाली नहीं है, तो यह डेटा को CSV फ़ाइल में एक अतिरिक्त पंक्ति के रूप में जोड़ता है। यह फ़ंक्शन CSV फ़ाइल को मौजूदा पाठ को अधिलेखित किए बिना नए निकाले गए डेटा के साथ लगातार अपडेट किए जाने की अनुमति देता है।

 csv_file_path = 'product_data.csv'
fieldnames = ['title', 'ratings', 'price']
with open(csv_file_path, 'a', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    if csvfile.tell() == 0:
        writer.writeheader()
    writer.writerow(extracted_data)

कोड कार्यान्वयन

कृपया हमारे पूर्ण कोड को देखें, जो आपको जल्दी से शुरू करने में मदद करेगा। कोड अच्छी तरह से संरचित और प्रलेखित है, जिससे यह शुरुआती-अनुकूल है। इस कोड को निष्पादित करने के लिए, उपयोगकर्ता के पास एक ही निर्देशिका में "Amazon_product_urls" नामक CSV फ़ाइल होनी चाहिए। नीचे CSV फ़ाइल की संरचना है:

4.png

import requests
import csv
import random
from lxml import html
from typing import Dict, List


def send_requests(
    url: str, headers: Dict[str, str], proxies: Dict[str, str]
) -> List[Dict[str, str]]:
    """
    हेडर और प्रॉक्सी के साथ कई URL के लिए HTTP GET अनुरोध भेजता है।

    Args:
        urls (str): अनुरोध भेजने के लिए URL।
        headers (Dict[str, str]): अनुरोध हेडर युक्त शब्दकोश।
        proxies (Dict[str, str]): प्रॉक्सी सेटिंग्स युक्त शब्दकोश।

    Returns:
        Response: प्रत्येक URL के लिए प्रतिक्रिया डेटा युक्त प्रतिक्रिया ऑब्जेक्ट।
    """
    try:
        response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
       # प्रतिक्रिया सत्यापन
        if len(response.text)> 10000:
            return response
        return None
    except Exception as e:
        print(f"Error occurred while fetching URL {url}: {str(e)}")


def extract_data_from_html(
    response, xpath_queries: Dict[str, str]
) -> Dict[str, List[str]]:
    """
   XPath क्वेरी का उपयोग करके HTML सामग्री से डेटा निकालता है।

    Args:
        response (Response): प्रतिक्रिया वस्तु।
        xpath_queries (Dict[str, str]): डेटा निष्कर्षण के लिए XPath प्रश्नों वाले शब्दकोश।

    Returns:
        Dict[str, str]: प्रत्येक XPath क्वेरी के लिए निकाले गए डेटा युक्त शब्दकोश।
    """
    extracted_data = {}
    tree = html.fromstring(response.text)
    for key, xpath_query in xpath_queries.items():
        data = tree.xpath(xpath_query)[0].strip()
        extracted_data[key] = data
    return extracted_data


def save_to_csv(extracted_data: Dict[str, any]):
    """
    DictWriter का उपयोग करके CSV फ़ाइल में एक पंक्ति के रूप में एक शब्दकोश बचाता है।

    Args:
        extracted_data (Dict[str, any]): डेटा की एक पंक्ति का प्रतिनिधित्व करने वाला शब्दकोश।
    """
    csv_file_path = "product_data.csv"
    fieldnames = ["title", "ratings", "price"]
    with open(csv_file_path, "a", newline="") as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        if csvfile.tell() == 0:
            writer.writeheader()  # यदि फ़ाइल खाली है तो केवल हेडर लिखें
        writer.writerow(extracted_data)


def main():
    # एक CSV फ़ाइल से URL पढ़ना
    urls = []
    with open("amazon_product_urls.csv", "r") as file:
        reader = csv.DictReader(file)
        for row in reader:
            urls.append(row["url"])

    # अनुरोध हेडर को परिभाषित करना
    headers = {
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "accept-language": "en-IN,en;q=0.9",
        "dnt": "1",
        "sec-ch-ua": '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Windows"',
        "sec-fetch-dest": "document",
        "sec-fetch-mode": "navigate",
        "sec-fetch-site": "same-origin",
        "sec-fetch-user": "?1",
        "upgrade-insecure-requests": "1",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
    }

    useragents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4591.54 Safari/537.36",
        "Mozilla/5.0 (Windows NT 7_0_2; Win64; x64) AppleWebKit/541.38 (KHTML, like Gecko) Chrome/105.0.1585 Safari/537.36",
        "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.7863.44 Safari/537.36"
        ]

    # प्रॉक्सी को परिभाषित करना
    proxies = {"http": "IP:Port", "https": "IP:Port"}

    # URL को अनुरोध भेजना
    for url in urls:
        # हेडर में यूजरएजेंट रोटेशन
        headers["user-agent"] = random.choice(useragnets)
        response = send_requests(url, headers, proxies)
        if response:
            # HTML सामग्री से डेटा निकालना
            xpath_queries = {
                "title": '//span[@id="productTitle"]/text()',
                "ratings": '//span[@id="acrPopover"]/@title',
                "price": '//span[@class="a-offscreen"]/text()',
            }
            extracted_data = extract_data_from_html(response, xpath_queries)

          # सीएसवी फ़ाइल में निकाले गए डेटा को सहेजना
            save_to_csv(extracted_data)


if __name__ == "__main__":
    main()

अजगर के माध्यम से अमेज़ॅन को स्क्रैप करने के लिए प्रॉक्सी सुझाव

Datacenter IPv4, घूर्णन मोबाइल, ISP, और आवासीय प्रॉक्सी सहित विभिन्न प्रॉक्सी समाधान, निर्बाध डेटा निष्कर्षण के लिए उपलब्ध हैं। वास्तविक उपयोगकर्ता व्यवहार को अनुकरण करने के लिए उचित रोटेशन लॉजिक और उपयोगकर्ता एजेंटों का उपयोग किया जाता है, जबकि विशेष प्रॉक्सिज़ आंतरिक रोटेशन और व्यापक आईपी पूल के साथ बड़े पैमाने पर स्क्रैपिंग का समर्थन करते हैं। प्रत्येक प्रॉक्सी विकल्प के पेशेवरों और विपक्षों को समझना निर्बाध डेटा निष्कर्षण के लिए महत्वपूर्ण है।

प्रकार पेशेवरों दोष
डेटासेंटर प्रॉक्सी

उच्च गति और प्रदर्शन।

प्रभावी लागत।

बड़ी मात्रा में अनुरोधों के लिए आदर्श।

आसानी से पता लगाया जा सकता है और ब्लैकलिस्ट किया जा सकता है।

एंटी-स्क्रैपिंग या एंटी-बॉट सिस्टम के खिलाफ विश्वसनीय नहीं है।

आवासीय प्रॉक्सी

वास्तविक आवासीय आईपी के कारण उच्च वैधता।

स्थान-विशिष्ट डेटा स्क्रैपिंग के लिए व्यापक वैश्विक आईपी उपलब्धता।

आईपी ​​रोटेशन क्षमताएं।

Datacenter Proxies की तुलना में अधिक महंगा है।

मोबाइल प्रॉक्सी

अत्यधिक वैध आईपी।

ब्लॉक और सत्यापन संकेतों से बचने के लिए प्रभावी।

अन्य प्रॉक्सी प्रकारों की तुलना में अधिक महंगा।

मोबाइल नेटवर्क रिलायंस के कारण डेटासेंटर प्रॉक्सी की तुलना में धीमा।

Isp परदे

अत्यधिक-विश्वसनीय IPS।

आवासीय आईपी की तुलना में तेजी से।

सीमित आईपी उपलब्धता।

आईपी ​​रोटेशन उपलब्ध नहीं है।

अमेज़ॅन से उत्पाद डेटा को स्क्रैप करने में प्लेटफ़ॉर्म के एंटी-स्क्रैपिंग तंत्र को प्रभावी ढंग से नेविगेट करने के लिए सावधानीपूर्वक तैयारी शामिल है। पायथन के साथ प्रॉक्सी सर्वर का उपयोग करने से कुशल डेटा प्रोसेसिंग और आवश्यक जानकारी के लक्षित निष्कर्षण को सक्षम करता है। वेब स्क्रैपिंग के लिए प्रॉक्सी का चयन करते समय, प्रदर्शन, लागत, सर्वर विश्वसनीयता और आपकी परियोजना की विशिष्ट आवश्यकताओं जैसे कारकों पर विचार करना महत्वपूर्ण है। गतिशील परदे के पीछे नियोजित करना और सुरक्षा उपायों का प्रतिकार करने के लिए रणनीतियों को लागू करना अवरुद्ध होने के जोखिम को कम कर सकता है और स्क्रैपिंग प्रक्रिया की समग्र दक्षता को बढ़ा सकता है।

टिप्पणियाँ:

0 टिप्पणियाँ