ویب صفحات سے ڈیٹا حاصل کرنے کے لئے ایک اہم صلاحیت ویب سکریپنگ ہے۔ پنٹیرسٹ اور انسٹاگرام ، جو ان کے ساتھ صارف کی بات چیت کے ذریعہ متحرک طور پر مواد کو لوڈ کرتے ہیں ، اس قسم کی ویب سائٹوں کی مثال ہیں۔ جاوا اسکرپٹ پر مبنی مواد کو سنبھالتے وقت باقاعدگی سے سکریپنگ کے طریقے ناکافی ہوتے ہیں۔ اس مضمون میں ، ہم ڈرامہ نگار کے بارے میں آٹومیشن ٹول کی حیثیت سے تفصیل سے بیان کریں گے جبکہ LXML اس طرح کی متحرک سائٹوں سے ڈیٹا نکالنے کے لئے استعمال ہوگا جس میں جاوا اسکرپٹ کو مناسب طریقے سے کام کرنے کی ضرورت ہے۔ اس نوٹ پر ، ہم بوٹس کی حیثیت سے پتہ لگانے سے بچنے کے لئے ڈرامہ نگار میں پراکسیوں کے استعمال پر تبادلہ خیال کرسکتے ہیں۔ اس ٹیوٹوریل میں ، ہم صارف کے طرز عمل کی نقالی کرکے تمام پوسٹ یو آر ایل کو بازیافت کرنے کے لئے انسٹاگرام پروفائل کو کھرچیں گے ، جیسے سکرولنگ اور پوسٹس کو لوڈ کرنے کا انتظار کرنا۔
ٹولز جو ہم اس گائیڈ میں استعمال کریں گے:
ہم پوسٹ یو آر ایل کو نکالنے کے لئے انسٹاگرام پروفائل کو کھرچنے کی مثال کے استعمال سے اس عمل کی وضاحت کریں گے ، صارف کی کارروائیوں کی نقالی کرتے ہیں جیسے صفحے کے ذریعے سکرول کرنا اور نئے ڈیٹا کو لوڈ کرنے کا انتظار کرنا۔ متحرک ویب سائٹیں AJAX درخواستوں کے ذریعہ اپنے مواد کو سنجیدگی سے لوڈ کریں ، جس کا مطلب ہے کہ صفحہ کے تمام مواد فوری طور پر قابل رسائی نہیں ہے۔
اس سے پہلے کہ ہم شروع کریں ، ضروری پیکیجز انسٹال کریں:
pip install playwright
pip install lxml
آپ کو ڈرامہ نگار براؤزرز بھی انسٹال کرنے کی ضرورت ہوگی:
playwright install
ہم براؤزر کو خود کار بنانے ، انسٹاگرام کے متحرک مواد کو لوڈ کرنے اور مزید پوسٹس کو لوڈ کرنے کے لئے صفحے کے ذریعے سکرول کرنے کے لئے ڈرامہ رائٹ کا استعمال کریں گے۔ آئیے ایک بنیادی آٹومیشن اسکرپٹ بنائیں:
آٹومیشن اسکرپٹ (ہیڈ لیس براؤزر):
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())
ایک بار جب مواد بھری ہوجائے تو ، ہم 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)
متحرک ویب سائٹوں کو کھرچنے کے ل you ، آپ کو اکثر لامحدود سکرولنگ کی نقالی کرنے کی ضرورت ہوتی ہے۔ ہمارے اسکرپٹ میں ، ہم جاوا اسکرپٹ کا استعمال کرتے ہوئے صفحے کو سکرول کرتے ہیں:
(window.scrollBy(0, 700))
اور اس کمانڈ کا استعمال کرتے ہوئے نئے مواد کو لوڈ کرنے کا انتظار کریں:
wait_for_load_state("networkidle")
انسٹاگرام میں شرح کی سخت حد اور اینٹی بوٹ اقدامات ہیں۔ مسدود ہونے سے بچنے کے ل 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())
اگرچہ ڈرامہ نگار متحرک ویب سائٹوں کو کھرچنے کے لئے ایک بہترین انتخاب ہے ، لیکن دوسرے ٹولز مختلف منظرناموں کے لئے موزوں ہوسکتے ہیں۔
ہر ٹول منفرد طاقت کی پیش کش کرتا ہے اور اس منصوبے کی مخصوص ضروریات اور شرائط کی بنیاد پر اس کا انتخاب کیا جاسکتا ہے۔
متحرک ویب سائٹوں کے کامیاب سکریپنگ کے لئے جو جاوا اسکرپٹ اور ایجیکس کی درخواستوں کو فعال طور پر استعمال کرتے ہیں ، طاقتور ٹولز کو موثر طریقے سے لامحدود سکرولنگ اور پیچیدہ انٹرایکٹو عناصر کو ہینڈل کرنے کے قابل طاقتور ٹولز ضروری ہیں۔ اس طرح کا ایک حل ڈرامہ نگار ہے۔ مائیکرو سافٹ کا ایک آلہ جو مکمل براؤزر آٹومیشن مہیا کرتا ہے ، جس سے یہ انسٹاگرام جیسے پلیٹ فارمز کے لئے ایک مثالی انتخاب ہے۔ ایچ ٹی ایم ایل پارسنگ کے لئے ایل ایکس ایم ایل لائبریری کے ساتھ مل کر ، ڈرامہ رائٹ ڈیٹا کو نکالنے کو بہت آسان بناتا ہے ، جس سے صفحہ عناصر کے ساتھ تعامل اور دستی مداخلت کے بغیر تجزیہ کے عمل کی خودمختاری کی اجازت ملتی ہے۔ مزید برآں ، پراکسی سرورز کا استعمال اینٹی بوٹ کے تحفظ کو روکنے میں مدد کرتا ہے اور آئی پی کو مسدود کرنے سے روکتا ہے ، جس سے مستحکم اور بلاتعطل کھرچنے والی کارروائیوں کو یقینی بناتا ہے۔
تبصرے: 0