ازگر کے ساتھ متحرک ویب سائٹوں کو کھرچنے کے لئے رہنما

تبصرے: 0

ویب صفحات سے ڈیٹا حاصل کرنے کے لئے ایک اہم صلاحیت ویب سکریپنگ ہے۔ پنٹیرسٹ اور انسٹاگرام ، جو ان کے ساتھ صارف کی بات چیت کے ذریعہ متحرک طور پر مواد کو لوڈ کرتے ہیں ، اس قسم کی ویب سائٹوں کی مثال ہیں۔ جاوا اسکرپٹ پر مبنی مواد کو سنبھالتے وقت باقاعدگی سے سکریپنگ کے طریقے ناکافی ہوتے ہیں۔ اس مضمون میں ، ہم ڈرامہ نگار کے بارے میں آٹومیشن ٹول کی حیثیت سے تفصیل سے بیان کریں گے جبکہ LXML اس طرح کی متحرک سائٹوں سے ڈیٹا نکالنے کے لئے استعمال ہوگا جس میں جاوا اسکرپٹ کو مناسب طریقے سے کام کرنے کی ضرورت ہے۔ اس نوٹ پر ، ہم بوٹس کی حیثیت سے پتہ لگانے سے بچنے کے لئے ڈرامہ نگار میں پراکسیوں کے استعمال پر تبادلہ خیال کرسکتے ہیں۔ اس ٹیوٹوریل میں ، ہم صارف کے طرز عمل کی نقالی کرکے تمام پوسٹ یو آر ایل کو بازیافت کرنے کے لئے انسٹاگرام پروفائل کو کھرچیں گے ، جیسے سکرولنگ اور پوسٹس کو لوڈ کرنے کا انتظار کرنا۔

ٹولز جو ہم اس گائیڈ میں استعمال کریں گے:

  • ڈرامہ نگار (براؤزر آٹومیشن کے لئے) ؛
  • LXML (XPath کا استعمال کرتے ہوئے ڈیٹا نکالنے کے لئے) ؛
  • ازگر (بطور ہماری پروگرامنگ زبان)۔

انسٹاگرام پوسٹس کو کھرچنے کے لئے مرحلہ وار گائیڈ

ہم پوسٹ یو آر ایل کو نکالنے کے لئے انسٹاگرام پروفائل کو کھرچنے کی مثال کے استعمال سے اس عمل کی وضاحت کریں گے ، صارف کی کارروائیوں کی نقالی کرتے ہیں جیسے صفحے کے ذریعے سکرول کرنا اور نئے ڈیٹا کو لوڈ کرنے کا انتظار کرنا۔ متحرک ویب سائٹیں AJAX درخواستوں کے ذریعہ اپنے مواد کو سنجیدگی سے لوڈ کریں ، جس کا مطلب ہے کہ صفحہ کے تمام مواد فوری طور پر قابل رسائی نہیں ہے۔

مرحلہ 1۔ مطلوبہ لائبریریوں کو انسٹال کریں

اس سے پہلے کہ ہم شروع کریں ، ضروری پیکیجز انسٹال کریں:


pip install playwright
pip install lxml

آپ کو ڈرامہ نگار براؤزرز بھی انسٹال کرنے کی ضرورت ہوگی:


playwright install

مرحلہ 2۔ متحرک ویب سائٹ سکریپنگ کے لئے پلے رائٹ سیٹ اپ

ہم براؤزر کو خود کار بنانے ، انسٹاگرام کے متحرک مواد کو لوڈ کرنے اور مزید پوسٹس کو لوڈ کرنے کے لئے صفحے کے ذریعے سکرول کرنے کے لئے ڈرامہ رائٹ کا استعمال کریں گے۔ آئیے ایک بنیادی آٹومیشن اسکرپٹ بنائیں:

آٹومیشن اسکرپٹ (ہیڈ لیس براؤزر):


import asyncio
from playwright.async_api import async_playwright

async def scrape_instagram():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)  # Headless mode No visual feedback
        page = await browser.new_page()
        
        # Visit the profile URL
        await page.goto("https://www.instagram.com/profile name/", wait_until="networkidle")

        # Click the button to load more posts 
        await page.get_by_role("button", name="Show more posts from").click()
        
        # Scroll the page to load dynamic content
        scroll_count = 5  # Customize this based on how many times you want to scroll
        for _ in range(scroll_count):
            await page.evaluate('window.scrollBy(0, 700);')
            await page.wait_for_timeout(3000)  # Wait for posts to load
            await page.wait_for_load_state("networkidle")
        
        # Get the page content
        content = await page.content()
        await browser.close()
        
        return content

# Run the asynchronous function
asyncio.run(scrape_instagram())

مرحلہ 3. صفحہ کو LXML اور XPATH کے ساتھ پارس کرنا

ایک بار جب مواد بھری ہوجائے تو ، ہم HTML کی تجزیہ کرنے اور XPath کا استعمال کرتے ہوئے ڈیٹا نکالنے کے لئے LXML کا استعمال کرسکتے ہیں۔ اس معاملے میں ، ہم پروفائل سے تمام پوسٹس کے URL نکال رہے ہیں۔

صفحہ کے مشمولات کی تجزیہ کرنا اور پوسٹ یو آر ایل نکالنا:


from lxml import html
import json

def extract_post_urls(page_content):
    # Parse the HTML content using lxml
    tree = html.fromstring(page_content)
    
    # XPath for extracting post URLs
    post_urls_xpath = '//a[contains(@href, "/p/")]/@href'
    
    # Extract URLs
    post_urls = tree.xpath(post_urls_xpath)
    
    # Convert relative URLs to absolute
    base_url = "https://www.instagram.com"
    post_urls = [f"{base_url}{url}" for url in post_urls]
    
    return post_urls

JSON فارمیٹ میں نکالے گئے ڈیٹا کو بچانے کے لئے مثال کے طور پر فنکشن:


def save_data(profile_url, post_urls):
    data = {profile_url: post_urls}
    with open('instagram_posts.json', 'w') as json_file:
        json.dump(data, json_file, indent=4)

# Scrape and extract URLs
page_content = asyncio.run(scrape_instagram())
post_urls = extract_post_urls(page_content)

# Save the extracted URLs in a JSON file
save_data("https://www.instagram.com/profile name/", post_urls)

مرحلہ 4۔ ڈرامہ نگار کے ساتھ لامحدود اسکرول کو سنبھالنا

متحرک ویب سائٹوں کو کھرچنے کے ل you ، آپ کو اکثر لامحدود سکرولنگ کی نقالی کرنے کی ضرورت ہوتی ہے۔ ہمارے اسکرپٹ میں ، ہم جاوا اسکرپٹ کا استعمال کرتے ہوئے صفحے کو سکرول کرتے ہیں:


(window.scrollBy(0, 700))

اور اس کمانڈ کا استعمال کرتے ہوئے نئے مواد کو لوڈ کرنے کا انتظار کریں:


 wait_for_load_state("networkidle")

مرحلہ 5. ڈرامہ نگار کے ساتھ پراکسیوں کا استعمال

انسٹاگرام میں شرح کی سخت حد اور اینٹی بوٹ اقدامات ہیں۔ مسدود ہونے سے بچنے کے ل you ، آپ IP پتوں کو گھومنے اور درخواستوں کو تقسیم کرنے کے لئے پراکسی استعمال کرسکتے ہیں۔ ڈرامہ نگار آپ کے سکریپنگ آٹومیشن میں پراکسیوں کو مربوط کرنا آسان بناتا ہے۔

ڈرامہ نگار میں پراکسیوں کو نافذ کرنا:


async def scrape_with_proxy():
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False, 
            proxy={"server": "http://your-proxy-server:port"}
        )
        page = await browser.new_page()
        await page.goto("https://www.instagram.com/profile name/", wait_until="networkidle")
        # Continue scraping as before...

ڈرامہ رائٹ پراکسی کی بھی حمایت کرتا ہے کیونکہ صارف نام کا پاس ورڈ اور سرور کی مثال ذیل میں دی گئی ہے۔


async def scrape_with_proxy():
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False, 
            proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"}
        )
        page = await browser.new_page()
        await page.goto("https://www.instagram.com/profile name/", wait_until="networkidle")
        # Continue scraping as before...

پراکسی آئی پی پابندیوں ، کیپچا چیلنجوں سے بچنے میں مدد کرتی ہے ، اور انسٹاگرام جیسی ڈیٹا بھاری یا محدود ویب سائٹوں کی ہموار کھرچنے کو یقینی بناتی ہے۔

مکمل کوڈ


import asyncio
from playwright.async_api import async_playwright
from lxml import html
import json

# Function to automate browser and scrape dynamic content with proxies
async def scrape_instagram(profile_url, proxy=None):
    async with async_playwright() as p:
        # Set up browser with proxy if provided
        browser_options = {
            'headless': True,  # Use headed browser to see the action (can set to True for headless mode)
        }
        if proxy:
            browser_options['proxy'] = proxy

        # Launch the browser
        browser = await p.chromium.launch(**browser_options)
        page = await browser.new_page()

        # Visit the Instagram profile page
        await page.goto(profile_url, wait_until="networkidle")
        
        # Try clicking the "Show more posts" button (optional, might fail if button not found)
        try:
           await page.click('button:has-text("Show more posts from")')
        except Exception as e:
           print(f"No 'Show more posts' button found: {e}")


        # Scroll the page to load more posts
        scroll_count = 5  # Number of scrolls to load posts
        for _ in range(scroll_count):
            await page.evaluate('window.scrollBy(0, 500);')
            await page.wait_for_timeout(3000)  # Wait for new posts to load
            await page.wait_for_load_state("networkidle")

        # Get the complete page content after scrolling
        content = await page.content()
        await browser.close()  # Close the browser once done
        
        return content

# Function to parse the scraped page content and extract post URLs
def extract_post_urls(page_content):
    # Parse the HTML content using lxml
    tree = html.fromstring(page_content)
    
    # XPath for extracting post URLs
    post_urls_xpath = '//a[contains(@href, "/p/")]/@href'
    
    # Extract post URLs using the XPath
    post_urls = tree.xpath(post_urls_xpath)
    
    # Convert relative URLs to absolute URLs
    base_url = "https://www.instagram.com"
    post_urls = [f"{base_url}{url}" for url in post_urls]
    
    return post_urls

# Function to save the extracted post URLs into a JSON file
def save_data(profile_url, post_urls):
    # Structure the data in JSON format
    data = {profile_url: post_urls}
    
    # Save the data to a file
    with open('instagram_posts.json', 'w') as json_file:
        json.dump(data, json_file, indent=4)
    print(f"Data saved to instagram_posts.json")

# Main function to run the scraper and save the data
async def main():
    # Define the Instagram profile URL
    profile_url = "https://www.instagram.com/profile name/"
    
    # Optionally, set up a proxy
    proxy = {"server": "server", "username": "username", "password": "password"}  # Use None if no proxy is required
    
    # Scrape the Instagram page with proxies
    page_content = await scrape_instagram(profile_url, proxy=proxy)
    
    # Extract post URLs from the scraped page content
    post_urls = extract_post_urls(page_content)
    
    # Save the extracted post URLs into a JSON file
    save_data(profile_url, post_urls)

if __name__ == '__main__':
   asyncio.run(main())

ویب سکریپنگ کے لئے متبادل آٹومیشن ٹولز

اگرچہ ڈرامہ نگار متحرک ویب سائٹوں کو کھرچنے کے لئے ایک بہترین انتخاب ہے ، لیکن دوسرے ٹولز مختلف منظرناموں کے لئے موزوں ہوسکتے ہیں۔

  1. سیلینیم: سیلینیم سب سے قدیم براؤزر آٹومیشن فریم ورک میں سے ایک ہے اور ڈرامہ نگار کے ساتھ اسی طرح کام کرتا ہے۔ یہ انتہائی ورسٹائل ہے لیکن اس میں کچھ جدید صلاحیتوں کا فقدان ہے جو ڈرامہ نگار پیش کرتے ہیں ، جیسے ایک ہی API کے ساتھ متعدد براؤزرز کو سنبھالنا۔
  2. کٹھ پتلی: کٹھ پتلی براؤزر آٹومیشن کے لئے ایک اور مقبول ٹول ہے ، خاص طور پر جاوا اسکرپٹ سے بھاری ویب سائٹوں کو کھرچنے کے لئے۔ ڈرامہ نگار کی طرح ، یہ ہیڈ لیس براؤزرز کو کنٹرول کرتا ہے اور متحرک مواد کے ساتھ تعامل کی اجازت دیتا ہے۔
  3. درخواستیں + بیوٹیف سوپ: آسان ویب سائٹوں کے لئے جن کے لئے جاوا اسکرپٹ کو مواد لوڈ کرنے کی ضرورت نہیں ہوتی ہے ، بیوٹیف سوپ کے ساتھ مل کر درخواستوں کی لائبریری ایک ہلکا پھلکا متبادل ہے۔ تاہم ، یہ متحرک مواد کو اچھی طرح سے نہیں سنبھالتا ہے۔

ہر ٹول منفرد طاقت کی پیش کش کرتا ہے اور اس منصوبے کی مخصوص ضروریات اور شرائط کی بنیاد پر اس کا انتخاب کیا جاسکتا ہے۔

متحرک ویب سائٹوں کے کامیاب سکریپنگ کے لئے جو جاوا اسکرپٹ اور ایجیکس کی درخواستوں کو فعال طور پر استعمال کرتے ہیں ، طاقتور ٹولز کو موثر طریقے سے لامحدود سکرولنگ اور پیچیدہ انٹرایکٹو عناصر کو ہینڈل کرنے کے قابل طاقتور ٹولز ضروری ہیں۔ اس طرح کا ایک حل ڈرامہ نگار ہے۔ مائیکرو سافٹ کا ایک آلہ جو مکمل براؤزر آٹومیشن مہیا کرتا ہے ، جس سے یہ انسٹاگرام جیسے پلیٹ فارمز کے لئے ایک مثالی انتخاب ہے۔ ایچ ٹی ایم ایل پارسنگ کے لئے ایل ایکس ایم ایل لائبریری کے ساتھ مل کر ، ڈرامہ رائٹ ڈیٹا کو نکالنے کو بہت آسان بناتا ہے ، جس سے صفحہ عناصر کے ساتھ تعامل اور دستی مداخلت کے بغیر تجزیہ کے عمل کی خودمختاری کی اجازت ملتی ہے۔ مزید برآں ، پراکسی سرورز کا استعمال اینٹی بوٹ کے تحفظ کو روکنے میں مدد کرتا ہے اور آئی پی کو مسدود کرنے سے روکتا ہے ، جس سے مستحکم اور بلاتعطل کھرچنے والی کارروائیوں کو یقینی بناتا ہے۔

تبصرے:

0 تبصرے