کھرچنے والے ریڈڈیٹ رجحان سازی کے موضوعات ، برادری کی مصروفیت اور مقبول پوسٹوں سے متعلق بہت ساری معلومات پیش کرتے ہیں۔ اگرچہ ریڈڈٹ کا آفیشل API اس طرح کے مواد تک رسائی کے ل a ایک عام ذریعہ ہے ، لیکن اس کی حدود ہیں کہ اعداد و شمار کے انتخاب میں زیادہ لچک فراہم کرکے سکریپنگ پر قابو پایا جاسکتا ہے۔ یہ ٹیوٹوریل متحرک مواد اور LXML لائبریری کو ڈیٹا نکالنے کے ل ang ، غیر متزلزل پلے رائٹ لائبریری اور LXML لائبریری کے انتظام کے لئے آپ کی رہنمائی کرے گا ، جس سے ریڈڈیٹ کو کھرچنے کے لئے ایک جامع نقطہ نظر کی اجازت ہوگی۔
شروع کرنے سے پہلے ، یقینی بنائیں کہ آپ کے پاس ازگر انسٹال ہے اور مطلوبہ لائبریریوں کو یقینی بنائیں:
pip install playwright
pip install lxml
ضروری لائبریریوں کو انسٹال کرنے کے بعد ، آپ کو پلے رائٹ براؤزر بائنریز انسٹال کرنے کی ضرورت ہوگی:
playwright install
صرف کرومیم براؤزر انسٹال کرنے کے لئے مندرجہ ذیل کمانڈ استعمال کریں:
Playwright install chromium
یہ ٹولز ریڈٹ کے متحرک مواد کے ساتھ تعامل کرنے ، HTML کی تجزیہ کرنے اور مطلوبہ ڈیٹا نکالنے میں ہماری مدد کریں گے۔
ڈرامہ نگار ایک طاقتور ٹول ہے جو ہمیں براؤزر پر قابو پانے اور ویب صفحات کے ساتھ بات چیت کرنے کی اجازت دیتا ہے جیسا کہ ایک انسانی صارف ہوتا ہے۔ ہم اسے ریڈڈیٹ پیج کو لوڈ کرنے اور HTML مواد حاصل کرنے کے لئے استعمال کریں گے۔
ریڈڈیٹ پیج کو لوڈ کرنے کے لئے ڈرامہ نگار Async کوڈ یہ ہے:
import asyncio
from playwright.async_api import async_playwright
async def fetch_page_content():
async with async_playwright() as playwright:
browser = await playwright.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://www.reddit.com/r/technology/top/?t=week")
page_content = await page.content()
await browser.close()
return page_content
# Fetch the page content
page_content = asyncio.run(fetch_page_content())
جب کھرچتے ہو تو ، آپ کو شرح کو محدود کرنے یا آئی پی مسدود کرنے جیسے مسائل کا سامنا کرنا پڑ سکتا ہے۔ ان کو کم کرنے کے ل you ، آپ اپنے IP ایڈریس اور کسٹم ہیڈر کو گھومنے کے لئے پراکسیوں کا استعمال کرسکتے ہیں تاکہ صارف کے حقیقی طرز عمل کی نقل کریں۔
جب کھرچتے ہو تو ، آپ کو شرح کو محدود کرنے یا آئی پی مسدود کرنے جیسے مسائل کا سامنا کرنا پڑ سکتا ہے۔ ان کو کم کرنے کے ل you ، آپ اپنے IP ایڈریس اور کسٹم ہیڈر کو گھومنے کے لئے پراکسیوں کا استعمال کرسکتے ہیں تاکہ صارف کے حقیقی طرز عمل کی نقل کریں۔ پراکسیوں کا استعمال IP پتوں کو گھومنے اور پتہ لگانے سے بچنے کے لئے کیا جاسکتا ہے۔ اس کو آپ کے خدمت فراہم کرنے والے کے ذریعہ سنبھالا جاسکتا ہے ، اس بات کو یقینی بناتے ہوئے کہ وہ آئی پی ایس کے تالاب کا انتظام کریں اور ضرورت کے مطابق انہیں گھومائیں۔
async def fetch_page_content_with_proxy():
async with async_playwright() as playwright:
browser = await playwright.chromium.launch(headless=True, proxy={
"server": "http://proxy-server:port",
"username": "your-username",
"password": "your-password"
})
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://www.reddit.com/r/technology/top/?t=week", wait_until='networkidle')
page_content = await page.content()
await browser.close()
return page_content
ایک بار جب ہمارے پاس HTML مواد موجود ہے تو ، اگلا مرحلہ اس کی تجزیہ کرنا ہے اور LXML کا استعمال کرتے ہوئے متعلقہ ڈیٹا کو نکالنا ہے۔
from lxml import html
# Parse the HTML content
parser = html.fromstring(page_content)
ریڈڈیٹ کے آر/ٹکنالوجی سبریڈیٹ پر ٹاپ پوسٹس آرٹیکل عناصر کے اندر موجود ہیں۔ ان عناصر کو مندرجہ ذیل ایکس پاتھ کا استعمال کرتے ہوئے نشانہ بنایا جاسکتا ہے:
# Extract individual post elements
elements = parser.xpath('//article[@class="w-full m-0"]')
ایکسپاتھ ایچ ٹی ایم ایل دستاویز سے نوڈس کو نیویگیٹ کرنے اور منتخب کرنے کے لئے ایک مضبوط ٹول ہے۔ ہم اسے ہر پوسٹ سے عنوان ، لنک اور ٹیگ نکالنے کے لئے استعمال کریں گے۔
یہاں ہر ڈیٹا پوائنٹ کے لئے مخصوص XPATHS ہیں:
Title: @aria-label
Link: .//div[@class="relative truncate text-12 xs:text-14 font-semibold mb-xs "]/a/@href
Tag: .//span[@class="bg-tone-4 inline-block truncate max-w-full text-12 font-normal align-text-bottom text-secondary box-border px-[6px] rounded-[20px] leading-4 relative top-[-0.25rem] xs:top-[-2px] my-2xs xs:mb-sm py-0 "]/div/text()
اب جب ہم نے عناصر کو نشانہ بنایا ہے ، ہم ہر پوسٹ پر تکرار کرسکتے ہیں اور مطلوبہ ڈیٹا نکال سکتے ہیں۔
posts_data = []
# Iterate over each post element
for element in elements:
title = element.xpath('@aria-label')[0]
link = element.xpath('.//div[@class="relative truncate text-12 xs:text-14 font-semibold mb-xs "]/a/@href')[0]
tag = element.xpath('.//span[@class="bg-tone-4 inline-block truncate max-w-full text-12 font-normal align-text-bottom text-secondary box-border px-[6px] rounded-[20px] leading-4 relative top-[-0.25rem] xs:top-[-2px] my-2xs xs:mb-sm py-0 "]/div/text()')[0].strip()
post_info = {
"title": title,
"link": link,
"tag": tag
}
posts_data.append(post_info)
ڈیٹا نکالنے کے بعد ، ہمیں اسے ساختی شکل میں بچانے کی ضرورت ہے۔ JSON اس مقصد کے لئے وسیع پیمانے پر استعمال شدہ شکل ہے۔
import json
# Save the data to a JSON file
with open('reddit_posts.json', 'w') as f:
json.dump(posts_data, f, indent=4)
print("Data extraction complete. Saved to reddit_posts.json")
آر/ٹکنالوجی سے ریڈڈیٹ کی ٹاپ پوسٹس کو کھرچنے اور JSON کی حیثیت سے ڈیٹا کو بچانے کے لئے یہاں مکمل کوڈ ہے:
import asyncio
from playwright.async_api import async_playwright
from lxml import html
import json
async def fetch_page_content():
async with async_playwright() as playwright:
browser = await playwright.chromium.launch(headless=True, proxy={
"server": "IP:port",
"username": "your-username",
"password": "your-password"
})
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://www.reddit.com/r/technology/top/?t=week", wait_until='networkidle')
page_content = await page.content()
await browser.close()
return page_content
# Fetch the page content
page_content = asyncio.run(fetch_page_content())
# Parse the HTML content using lxml
parser = html.fromstring(page_content)
# Extract individual post elements
elements = parser.xpath('//article[@class="w-full m-0"]')
# Initialize a list to hold the extracted data
posts_data = []
# Iterate over each post element
for element in elements:
title = element.xpath('@aria-label')[0]
link = element.xpath('.//div[@class="relative truncate text-12 xs:text-14 font-semibold mb-xs "]/a/@href')[0]
tag = element.xpath('.//span[@class="bg-tone-4 inline-block truncate max-w-full text-12 font-normal align-text-bottom text-secondary box-border px-[6px] rounded-[20px] leading-4 relative top-[-0.25rem] xs:top-[-2px] my-2xs xs:mb-sm py-0 "]/div/text()')[0].strip()
post_info = {
"title": title,
"link": link,
"tag": tag
}
posts_data.append(post_info)
# Save the data to a JSON file
with open('reddit_posts.json', 'w') as f:
json.dump(posts_data, f, indent=4)
print("Data extraction complete. Saved to reddit_posts.json")
یہ طریقہ مختلف ذیلی تقسیموں کو کھرچنے کے قابل بناتا ہے ، اور ریڈٹ کمیونٹیز کے اندر بھرپور مباحثوں سے بصیرت سے متعلق معلومات اکٹھا کرتا ہے۔ ریڈڈیٹ کے ذریعہ پتہ لگانے کے خطرے کو کم سے کم کرنے کے لئے گھومنے والی پراکسیوں کا استعمال کرنا ضروری ہے۔ موبائل اور رہائشی متحرک پراکسیوں کو ملازمت دینا ، جو آن لائن سب سے زیادہ ٹرسٹ عنصر رکھتے ہیں ، اس بات کو یقینی بناتے ہیں کہ ڈیٹا کو کیپچاس یا بلاکس کو متحرک کیے بغیر جمع کیا جاسکتا ہے ، اس طرح اس کو ہموار کرنے والے تجربے میں آسانی پیدا ہوتی ہے۔
تبصرے: 0