اس کی مضبوط لائبریریوں اور سیدھے سادے نحو کی وجہ سے ویب سکریپنگ کے لئے ایک اعلی انتخاب کے طور پر کھڑا ہے۔ اس مضمون میں ، ہم ویب سکریپنگ کے بنیادی اصولوں کو تلاش کریں گے اور آپ کا پہلا ویب کھرچنا بنانے کے ل your اپنے ازگر ماحول کو ترتیب دینے کے ذریعے آپ کی رہنمائی کریں گے۔ ہم آپ کو کھرچنے والے کاموں کے ل suited موزوں کلیدی ازگر لائبریریوں سے متعارف کرائیں گے ، جس میں خوبصورت سوپ ، ڈرامہ نگار ، اور ایل ایکس ایم ایل شامل ہیں۔
ازگر ویب کو کھرچنے کو آسان بنانے کے ل several کئی لائبریریوں کو مہیا کرتا ہے۔ یہاں کچھ عام طور پر استعمال ہونے والے کچھ ہیں:
HTTP (ہائپر ٹیکسٹ ٹرانسفر پروٹوکول) پورے ویب میں ڈیٹا کی منتقلی کے لئے ایک ایپلی کیشن پرت پروٹوکول ہے۔ آپ براؤزر میں یو آر ایل ٹائپ کرتے ہیں ، اور یہ HTTP کی درخواست تیار کرتا ہے اور اسے ویب سرور کو بھیجتا ہے۔ اس کے بعد ویب سرور براؤزر کو HTTP جواب واپس بھیجتا ہے جو یہ آپ کو HTML صفحے کے طور پر پیش کرتا ہے۔ ویب سکریپنگ کے ل you ، آپ کو اس عمل کی نقل کرنے کی ضرورت ہے اور پروگرام کے مطابق ویب صفحات کا HTTP مواد حاصل کرنے کے لئے اپنے اسکرپٹ سے HTTP درخواستیں تیار کریں۔
پہلے ، یقینی بنائیں کہ آپ نے اپنے سسٹم پر ازگر انسٹال کیا ہے۔ آپ اسے ازگر کی سرکاری ویب سائٹ سے ڈاؤن لوڈ کرسکتے ہیں۔
ایک ورچوئل ماحول انحصار کو سنبھالنے میں مدد کرتا ہے۔ ورچوئل ماحول کو بنانے اور چالو کرنے کے لئے ان کمانڈوں کا استعمال کریں:
python -m venv scraping_env
source scraping_env/bin/activate
اگلا ، مندرجہ ذیل کمانڈز کا استعمال کرتے ہوئے مطلوبہ پیکیجز انسٹال کریں:
pip install requests
pip install beautifulsoup4
pip install lxml
آئیے مستحکم HTML مواد کو کھرچنے کی درخواست کا استعمال کرتے ہوئے ایک سادہ ویب کھرچنی سے شروع کرتے ہیں۔
HTTP کی سب سے عام قسم کی درخواست گیٹ کی درخواست ہے ، جو کسی مخصوص URL سے ڈیٹا بازیافت کرنے کے لئے استعمال ہوتی ہے۔ http://example.com پر گیٹ درخواست انجام دینے کے طریقوں کی ایک بنیادی مثال یہ ہے۔
import requests
url = 'http://example.com'
response = requests.get(url)
درخواستوں کی لائبریری جواب کو سنبھالنے اور اس پر کارروائی کرنے کے متعدد طریقے مہیا کرتی ہے:
اسٹیٹس کوڈ چیک کریں: یقینی بنائیں کہ درخواست کامیاب رہی۔
if response.status_code == 200:
print('Request was successful!')
else:
print('Request failed with status code:', response.status_code)
مواد نکالنا: متن یا JSON مواد کو ردعمل سے نکالیں۔
# متن کے بطور جوابی مواد حاصل کریں
page_content = response.text
print(page_content)
# JSON کے بطور جوابی مواد حاصل کریں (اگر جواب JSON فارمیٹ میں ہے)
json_content = response.json()
print(json_content)
HTTP اور نیٹ ورک کی غلطیاں اس وقت ہوسکتی ہیں جب کوئی وسائل قابل رسائ نہیں ہوتا ہے ، درخواست کا وقت ختم ہوجاتا ہے ، یا سرور غلطی HTTP کی حیثیت (جیسے 404 نہیں ملا ، 500 داخلی سرور کی خرابی) واپس کرتا ہے۔ ہم ان حالات کو سنبھالنے کے لئے درخواستوں کے ذریعہ اٹھائے گئے استثناءی اشیاء کا استعمال کرسکتے ہیں۔
import requests
url = 'http://example.com'
try:
response = requests.get(url, timeout=10) # Set a timeout for the request
response.raise_for_status() # Raises an HTTPError for bad responses
except requests.exceptions.HTTPError as http_err:
print(f'HTTP error occurred: {http_err}')
except requests.exceptions.ConnectionError:
print('Failed to connect to the server.')
except requests.exceptions.Timeout:
print('The request timed out.')
except requests.exceptions.RequestException as req_err:
print(f'Request error: {req_err}')
else:
print('Request was successful!')
ویب سکریپنگ کے ل we ، ہمیں اکثر HTML مواد سے ڈیٹا نکالنے کی ضرورت ہوتی ہے۔ یہ حصہ اس بارے میں بات کرے گا کہ کچھ لائبریریوں جیسے خوبصورت سوپ یا ایل ایکس ایم ایل کے ساتھ ایچ ٹی ایم ایل عناصر سے ڈیٹا تلاش کرنے اور نکالنے کے بارے میں بات کی جائے گی۔
HTML (HyperText Markup Language) ویب صفحات بنانے کے لیے معیاری مارک اپ زبان ہے۔ یہ عناصر کے گھیرے پر مشتمل ہوتا ہے جن کی نمائندگی ٹیگوں جیسے <div>, <p>, <a> وغیرہ سے کی جاتی ہے۔ ہر ٹیگ کے پاس خصوصیات ہو سکتی ہیں اور اس میں متن، دیگر ٹیگ یا دونوں ہو سکتے ہیں۔
ایکسپاتھ اور سی ایس ایس سلیکٹرز ان کی صفات یا دستاویز میں ان کی پوزیشن کی بنیاد پر ایچ ٹی ایم ایل عناصر کو منتخب کرنے کا ایک ورسٹائل طریقہ فراہم کرتے ہیں۔
جب ویب سکریپنگ کرتے ہو تو ، ویب صفحات سے مخصوص ڈیٹا نکالنے کے لئے اکثر HTML عناصر کو نشانہ بنانے کے لئے صحیح XPath یا CSS سلیکٹرز کی نشاندہی کرنے کی ضرورت ہوتی ہے۔ یہاں آپ ان سلیکٹرز کو موثر انداز میں تلاش کرسکتے ہیں:
زیادہ تر جدید ویب براؤزر بلٹ ان ڈویلپر ٹولز کے ساتھ آتے ہیں جو آپ کو ویب صفحات کے HTML ڈھانچے کا معائنہ کرنے کی اجازت دیتے ہیں۔ ان ٹولز کو کس طرح استعمال کرنے کے بارے میں ایک قدم بہ قدم ہدایت نامہ یہ ہے:
XPath: /html/body/div/h1
CSS Selector: body > div > h1
خوبصورت سوپ HTML اور XML دستاویزات کی تجزیہ کرنے کے لئے ایک ازگر لائبریری ہے۔ یہ HTML ڈھانچے کے ذریعے تشریف لے جانے اور تلاش کرنے کے لئے آسان طریقے اور اوصاف فراہم کرتا ہے۔
from bs4 import BeautifulSoup
import requests
# کھرچنے کے لئے ویب پیج کا یو آر ایل
url = 'https://example.com'
# URL کو HTTP حاصل کریں درخواست بھیجیں
response = requests.get(url)
# خوبصورت سوپ کا استعمال کرتے ہوئے ردعمل کے HTML مواد کی تجزیہ کریں
soup = BeautifulSoup(response.content, 'html.parser')
# CSS سیلیکٹر استعمال کریں تاکہ تمام <h1> ٹیگ تلاش کریں جو <div> ٹیگوں کے اندر ہیں
# جو <body> ٹیگ کے براہ راست بچے ہیں۔
h1_tags = soup.select('body > div > h1')
# ملے ہوئے <h1> ٹیگوں کی فہرست پر تکرار کریں اور ان کا متنی مواد پرنٹ کریں۔
for tag in h1_tags:
print(tag.text)
پارسنگ کی غلطیاں اس وقت ہوتی ہیں جب HTML یا XML ڈھانچہ توقع کے مطابق نہیں ہوتا ہے ، جس کی وجہ سے ڈیٹا نکالنے میں مسائل پیدا ہوتے ہیں۔ ان کا انتظام استثناء جیسے استثناء کو سنبھال کر کیا جاسکتا ہے۔
from bs4 import BeautifulSoup
import requests
# کھرچنے کے لئے ویب پیج کا یو آر ایل
url = 'https://example.com'
# URL کو HTTP حاصل کریں درخواست بھیجیں
response = requests.get(url)
try:
# خوبصورت سوپ کا استعمال کرتے ہوئے ردعمل کے HTML مواد کی تجزیہ کریں
soup = BeautifulSoup(response.content, 'html.parser')
# CSS سیلیکٹر استعمال کریں تاکہ تمام <h1> ٹیگ تلاش کریں جو <div> ٹیگوں کے اندر ہیں
# جو <body> ٹیگ کے براہ راست بچے ہیں۔
h1_tags = soup.select('body > div > h1')
# ملے ہوئے <h1> ٹیگوں کی فہرست پر تکرار کریں اور ان کا متنی مواد پرنٹ کریں۔
for tag in h1_tags:
print(tag.text)
except AttributeError as attr_err:
# ایسے معاملات کو سنبھالیں جہاں ایک وصف دہندہ ہوسکتا ہے (جیسے ، اگر جواب نہیں ہے۔
print(f'Attribute error occurred: {attr_err}')
except Exception as parse_err:
# کسی بھی دوسری مستثنیات کو سنبھالیں جو پارسنگ کے دوران ہوسکتی ہیں
print(f'Error while parsing HTML: {parse_err}')
خوبصورت سوپ کے علاوہ ، ازگر میں HTML اور XML دستاویزات کی تجزیہ کرنے کے لئے ایک اور مشہور لائبریری LXML ہے۔ اگرچہ بیوٹولسپ پارسڈ ڈیٹا کو نیویگیٹ کرنے اور جوڑنے کے ل a ایک آسان انٹرفیس فراہم کرنے پر مرکوز ہے ، لیکن ایل ایکس ایم ایل اپنی رفتار اور لچک کے لئے جانا جاتا ہے ، جس سے یہ کارکردگی کے اہم کاموں کے ل a ایک ترجیحی انتخاب بنتا ہے۔
from lxml.html import fromstring
import requests
# کھرچنے کے لئے ویب پیج کا یو آر ایل
url = 'https://example.com'
# URL کو HTTP حاصل کریں درخواست بھیجیں
response = requests.get(url)
# LXML کے منجمد طریقہ کار کا استعمال کرتے ہوئے ردعمل کے HTML مواد کی تجزیہ کریں
parser = fromstring(response.text)
# XPath استعمال کریں تاکہ پہلے <h1> ٹیگ کا متنی مواد تلاش کریں
# جو <div> ٹیگ کے اندر ہے، جو <body> ٹیگ کا براہ راست بچہ ہے۔
title = parser.xpath('/html/body/div/h1/text()')[0]
# عنوان پرنٹ کریں
print(title)
خوبصورت سوپ کی طرح ، LXML آپ کو lxml.etree.xmlsyntaxerror جیسے استثناء کو پکڑ کر پارسنگ کی غلطیوں کو خوبصورتی سے سنبھالنے کی اجازت دیتا ہے۔
from lxml.html import fromstring
from lxml import etree
import requests
# کھرچنے کے لئے ویب پیج کا یو آر ایل
url = 'https://example.com'
# URL کو HTTP حاصل کریں درخواست بھیجیں
response = requests.get(url)
try:
# LXML کے منجمد طریقہ کار کا استعمال کرتے ہوئے ردعمل کے HTML مواد کی تجزیہ کریں
parser = fromstring(response.text)
# XPath استعمال کریں تاکہ پہلے <h1> ٹیگ کا متنی مواد تلاش کریں
# جو <div> ٹیگ کے اندر ہے، جو <body> ٹیگ کا براہ راست بچہ ہے۔
title = parser.xpath('/html/body/div/h1/text()')[0]
# عنوان پرنٹ کریں
print(title)
except IndexError:
# اس معاملے کو سنبھالیں جہاں ایکسپاتھ استفسار کوئی نتائج واپس نہیں کرتا ہے
print('No <h1> tag found in the specified location.')
except etree.XMLSyntaxError as parse_err:
# پارسنگ کے دوران XML نحو کی غلطیوں کو سنبھالیں
print(f'Error while parsing HTML: {parse_err}')
except Exception as e:
# کسی اور استثناء کو سنبھالیں
print(f'An unexpected error occurred: {e}')
ایک بار جب آپ HTML عناصر سے کامیابی کے ساتھ ڈیٹا نکال لیتے ہیں تو ، اگلا مرحلہ اس ڈیٹا کو محفوظ کرنا ہے۔ ازگر سکریپڈ ڈیٹا کو بچانے کے لئے متعدد اختیارات فراہم کرتا ہے ، جس میں CSV فائلوں ، JSON فائلوں ، اور ڈیٹا بیس کو بچت بھی شامل ہے۔ یہاں مختلف فارمیٹس کا استعمال کرتے ہوئے نکالا ہوا ڈیٹا کو بچانے کے طریقے کا ایک جائزہ ہے:
سی ایس وی (کوما سے الگ اقدار) ٹیبلر ڈیٹا کو ذخیرہ کرنے کے لئے ایک سادہ اور وسیع پیمانے پر استعمال شدہ شکل ہے۔ ازگر میں CSV ماڈیول CSV فائلوں میں ڈیٹا لکھنا آسان بناتا ہے۔
import csv
# نمونہ کا ڈیٹا
data = {
'title': 'Example Title',
'paragraphs': ['Paragraph 1', 'Paragraph 2', 'Paragraph 3']
}
# ڈیٹا کو CSV فائل میں محفوظ کریں
with open('scraped_data.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'Paragraph'])
for paragraph in data['paragraphs']:
writer.writerow([data['title'], paragraph])
print('Data saved to scraped_data.csv')
JSON (جاوا اسکرپٹ آبجیکٹ نوٹیشن) ایک ہلکا پھلکا ڈیٹا-انٹروچینج فارمیٹ ہے جو پڑھنے لکھنا آسان ہے۔ ازگر میں JSON ماڈیول JSON فارمیٹ میں ڈیٹا کو بچانے کے طریقے فراہم کرتا ہے۔
import json
# نمونہ کا ڈیٹا
data = {
'title': 'Example Title',
'paragraphs': ['Paragraph 1', 'Paragraph 2', 'Paragraph 3']
}
# ڈیٹا کو JSON فائل میں محفوظ کریں
with open('scraped_data.json', mode='w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
print('Data saved to scraped_data.json')
ڈرامہ نگار متحرک مواد کو کھرچنے اور ویب عناصر کے ساتھ بات چیت کرنے کا ایک طاقتور ذریعہ ہے۔ یہ جاوا اسکرپٹ ہیوی ویب سائٹوں کو سنبھال سکتا ہے جو مستحکم HTML پارسر نہیں کرسکتے ہیں۔
ڈرامہ نگار انسٹال کریں اور اسے ترتیب دیں:
pip install playwright
playwright install
پلے رائٹ آپ کو ویب عناصر کے ساتھ بات چیت کرنے کی اجازت دیتا ہے جیسے فارموں کو پُر کرنا اور بٹنوں پر کلک کرنا۔ یہ آگے بڑھنے سے پہلے ایجیکس کی درخواستوں کے مکمل ہونے کا انتظار کرسکتا ہے ، جس سے یہ متحرک مواد کو کھرچنے کے ل ideal مثالی بن جاتا ہے۔
فراہم کردہ کوڈ پلے رائٹ اور ایل ایکس ایم ایل کا استعمال کرتے ہوئے ایمیزون پروڈکٹ پیج پر ویب سکریپنگ انجام دیتا ہے۔ ابتدائی طور پر ، ضروری ماڈیول درآمد کیے جاتے ہیں۔ ایک رن فنکشن کی وضاحت سکریپنگ منطق کو سمیٹنے کے لئے کی گئی ہے۔ فنکشن ایک پراکسی سرور ترتیب دینے اور پراکسی اور غیر ہیڈ لیس موڈ میں ایک نیا براؤزر مثال لانچ کرکے شروع ہوتا ہے ، جس سے ہمیں براؤزر کی کارروائیوں کا مشاہدہ کرنے کی اجازت ملتی ہے۔ براؤزر کے سیاق و سباق کے اندر ، ایک نیا صفحہ کھولا جاتا ہے اور مخصوص ایمیزون پروڈکٹ یو آر ایل پر تشریف لے جاتا ہے ، جس میں 60 سیکنڈ کا ٹائم آؤٹ ہوتا ہے تاکہ اس صفحے کو مکمل طور پر بوجھ کو یقینی بنایا جاسکے۔
اس کے بعد اسکرپٹ لوکیٹرز اور ٹیکسٹ مماثل کا استعمال کرکے ڈراپ ڈاؤن مینو اور پروڈکٹ آپشن سے مخصوص پروڈکٹ اسٹائل کو منتخب کرنے کے لئے صفحہ کے ساتھ بات چیت کرتا ہے۔ یہ یقینی بنانے کے بعد کہ ان تعاملات مکمل ہوجائیں اور صفحہ پر دوبارہ مکمل طور پر لوڈ ہو گیا ہے ، صفحہ کا HTML مواد پکڑا گیا ہے۔
اس کے بعد عنصر کا درخت بنانے کے لئے HTML مواد کو LXML کے منجمد طریقہ کار کا استعمال کرتے ہوئے تجزیہ کیا جاتا ہے۔ ایک XPath استفسار ID پروڈکٹ ٹائٹل کے ساتھ کسی مخصوص عنصر سے مصنوع کے عنوان کے ٹیکسٹ مواد کو نکالنے کے لئے استعمال کیا جاتا ہے۔ اسکرپٹ میں ایسے معاملات کو سنبھالنے کے لئے غلطی سے نمٹنے شامل ہیں جہاں ایکسپاتھ استفسار کے نتائج واپس نہیں ہوتے ہیں ، جہاں پارسنگ کے دوران XML نحو کی غلطیاں ہوتی ہیں ، یا کوئی اور غیر متوقع استثناء۔ آخر میں ، TLXML'SHE نکالا ہوا مصنوع کا عنوان چھپا ہوا ہے ، اور براؤزر کا سیاق و سباق اور براؤزر سیشن کو ختم کرنے کے لئے بند ہے۔
رن فنکشن کو Sync_play رائٹ کے ذریعہ شروع کیا گیا ایک ڈرامہ رائٹ سیشن کے اندر عمل میں لایا جاتا ہے ، اس بات کو یقینی بناتے ہوئے کہ اس پورے عمل کو منظم اور کنٹرول شدہ ماحول میں پھانسی دی جائے۔ یہ ڈھانچہ ویب سکریپنگ ٹاسک کو انجام دیتے وقت مضبوطی اور غلطی کی لچک کو یقینی بناتا ہے۔
from playwright.sync_api import Playwright, sync_playwright
from lxml.html import fromstring, etree
def run(playwright: Playwright) -> None:
# پراکسی سرور کی وضاحت کریں
proxy = {"server": "https://IP:PORT", "username": "LOGIN", "password": "PASSWORD"}
# مخصوص پراکسی اور غیر ہیڈ لیس موڈ میں ایک نیا براؤزر مثال لانچ کریں
browser = playwright.chromium.launch(
headless=False,
proxy=proxy,
slow_mo=50,
args=['--ignore-certificate-errors'],
)
# ایک نیا براؤزر سیاق و سباق بنائیں
context = browser.new_context(ignore_https_errors=True)
# براؤزر کے سیاق و سباق میں ایک نیا صفحہ کھولیں
page = context.new_page()
# ایمیزون پروڈکٹ کے مخصوص صفحے پر جائیں
page.goto(
"https://www.amazon.com/A315-24P-R7VH-Display-Quad-Core-Processor-Graphics/dp/B0BS4BP8FB/",
timeout=10000,
)
# صفحہ کو مکمل طور پر لوڈ کرنے کا انتظار کریں
page.wait_for_load_state("load")
# ڈراپ ڈاؤن مینو میں سے ایک مخصوص پروڈکٹ اسٹائل منتخب کریں
page.locator("#dropdown_selected_style_name").click()
# ایک مخصوص مصنوعات کا آپشن منتخب کریں
page.click('//*[@id="native_dropdown_selected_style_name_1"]')
page.wait_for_load_state("load")
# بھری ہوئی صفحے کا HTML مواد حاصل کریں
html_content = page.content()
try:
# LXML کے منجمد طریقہ کار کا استعمال کرتے ہوئے HTML مواد کی تجزیہ کریں
parser = fromstring(html_content)
# مصنوع کے عنوان کے ٹیکسٹ مواد کو نکالنے کے لئے ایکس پاتھ کا استعمال کریں
product_title = parser.xpath('//span[@id="productTitle"]/text()')[0].strip()
# نکالا ہوا مصنوعات کا عنوان پرنٹ کریں
print({"Product Title": product_title})
except IndexError:
# اس معاملے کو سنبھالیں جہاں ایکسپاتھ استفسار کوئی نتائج واپس نہیں کرتا ہے
print('Product title not found in the specified location.')
except etree.XMLSyntaxError as parse_err:
# پارسنگ کے دوران XML نحو کی غلطیوں کو سنبھالیں
print(f'Error while parsing HTML: {parse_err}')
except Exception as e:
# کسی اور استثناء کو سنبھالیں
print(f'An unexpected error occurred: {e}')
# براؤزر کے سیاق و سباق اور براؤزر کو بند کریں
context.close()
browser.close()
# ڈرامہ نگار سیشن شروع کرنے اور اسکرپٹ چلانے کے لئے Sync_play رائٹ کا استعمال کریں
with sync_playwright() as playwright:
run(playwright)
ویب سائٹوں سے ڈیٹا کی کٹائی کے لئے ازگر کے ساتھ ویب سکریپنگ ایک طاقتور طریقہ ہے۔ زیر بحث ٹولز مختلف مقاصد کے لئے ویب ڈیٹا کو نکالنے ، پروسیسنگ اور اسٹوریج کی سہولت فراہم کرتے ہیں۔ اس عمل میں ، متبادل IP پتے اور درخواستوں کے مابین تاخیر کو نافذ کرنے کے لئے پراکسی سرورز کا استعمال بلاکس کو روکنے کے لئے بہت ضروری ہے۔ خوبصورت سوپ ابتدائی افراد کے لئے صارف دوست ہے ، جبکہ LXML اس کی کارکردگی کی بدولت بڑے ڈیٹاسیٹس کو سنبھالنے کے لئے موزوں ہے۔ مزید اعلی درجے کی سکریپنگ کی ضروریات کے لئے ، خاص طور پر متحرک طور پر بھری جاوا اسکرپٹ ویب سائٹوں کے ساتھ ، ڈرامہ نگار انتہائی موثر ثابت ہوتا ہے۔
تبصرے: 0