Parse xml rss feeds python cover

ڈیٹا کئی فارمیٹس میں ملتا ہے، سادہ CSV جدولوں اور JSON آبجیکٹس سے لے کر زیادہ وضاحتی اور درجہ بند XML دستاویزات تک۔ XML کچھ پرانا سا محسوس ہو سکتا ہے، مگر یہ اب بھی RSS فیڈز، APIs اور سافٹ ویئر کنفیگریشنز سمیت ہر جگہ استعمال ہوتا ہے۔

XML ڈیٹا استعمال کرنے سے پہلے اسے پارس کرنا ضروری ہے، یعنی پروگرام کو اس کے اندر موجود معلومات پڑھنا سکھانا۔ ElementTree، minidom اور lxml جیسی Python لائبریریوں کے ساتھ XML پارسنگ سیدھا اور آسان عمل ہے۔

آپ کو کسی بھی ڈیٹا فارمیٹ سے واسطہ پڑے، خصوصاً XML، اس کے ساتھ کام کرنا سیکھنا ہر ڈویلپر کے لیے ضروری مہارت ہے۔ اس گائیڈ میں، آپ XML سے مرحلہ وار ڈیٹا کو پڑھنے، نیویگیٹ کرنے اور نکالنے کا طریقہ سیکھیں گے۔

XML کے بنیادی اصول

XML سے مراد Extensible Markup Language ہے، جو ڈیٹا محفوظ کرنے اور منتقل کرنے کا ایک عمومی فارمیٹ ہے۔ اس کی ساخت انسانوں کے لیے قابل فہم اور مشینوں کے لیے قابل عمل ہے۔ اسے سادگی، لچک اور ویب پر وسیع استعمال کو سامنے رکھ کر بنایا گیا تھا۔

XML کو ایک درخت کی شکل میں سمجھا جا سکتا ہے۔ حقیقی درخت کی طرح اس میں ایک جڑ اور اس کے اندر موجود ذیلی عناصر ہوتے ہیں۔ یہ ساخت دکھاتی ہے کہ XML ڈیٹا کو درجہ بندی میں کیسے ترتیب دیتا ہے۔ Python میں XML کے لیے کئی طریقے موجود ہیں، جن میں ElementTree ماڈیول خاصا مقبول ہے۔ ElementTree میں دو بنیادی کلاسیں ہیں: ElementTree، جو پوری دستاویز کی نمائندگی کرتا ہے، اور Element، جو کسی ایک نوڈ کی نمائندگی کرتا ہے۔  

ڈویلپر XML کو کیسے پارس کرتے ہیں: اہم طریقے

Python میں، parse()فنکشن XML فائلوں کے ساتھ کام کرنے کا عموماً پہلا قدم ہے۔ یہ XML دستاویز کو پارس کر کے درخت کی ساخت میں بدلتا ہے، جس میں پروگرام آسانی سے نیویگیٹ کر سکتا ہے۔ ElementTree، lxml یا دوسری لائبریریوں کے ساتھ پارسنگ کی بنیاد یہی فنکشن ہے۔

پارسنگ کے طریقوں کو سمجھنے کے لیے، آپ کو پہلے XML فائل کے عناصر کو جاننے کی ضرورت ہے:

  • نام کی گنجائش – عناصر اور صفات کے ناموں کو منفرد بنا کر ناموں کے ٹکراؤ سے بچاتی ہے۔
  • جڑ کا عنصر – بنیادی کنٹینر جو دوسرے تمام عناصر کو گھیرے ہوئے ہے۔
  • صفات – کلید اور قدر کے جوڑے جو عناصر کے بارے میں اضافی معلومات پیش کرتے ہیں۔
  • بچوں کے عناصر – اندر موجود عناصر جو ڈیٹا کو درجہ بندی کے ساتھ منظم کرتے ہیں۔
  • متن کا مواد – عناصر کے اندر موجود اصل معلومات۔

یہ عناصر ایک منظم ساخت بناتے ہیں جو پروگراموں کو پیچیدہ ڈیٹا کو ذخیرہ کرنے اور شیئر کرنے کے قابل بناتا ہے۔ ساخت کو سمجھنے کے بعد، ہم Python میں بنیادی XML پارسنگ کی تکنیکوں کو دیکھ سکتے ہیں:  

1ElementTreeماڈیول   

Python کی بلٹ اِن لائبریری، جو XML درختوں میں تلاش کے لیے استعمال میں آسان API دیتی ہے۔ یہ زیادہ تر کاموں کے لیے بہت اچھا کام کرتا ہے کیونکہ یہ کارکردگی کے ساتھ استعمال کو متوازن کرتا ہے۔   

2lxml   

تھرڈ پارٹی لائبریری، جس میں XPath، XSLT اور توثیق کی سپورٹ شامل ہے۔ یہ تیز ہے اور اس میں ElementTree سے زیادہ خصوصیات ہیں۔ یہ پیچیدہ XML پروسیسنگ کے لیے بہترین ہے۔   

3DOM (دستاویز آبجیکٹ ماڈل)  

یہ مکمل XML دستاویز کو درخت کی ساخت کے طور پر میموری میں لوڈ کرتا ہے۔ جبکہ نیویگیٹ کرنا اور اس میں ترمیم کرنا سیدھا سیدھا ہے، یہ بڑی فائلوں کے لیے زیادہ میموری استعمال کر سکتا ہے۔ 

4SAX (XML کے لیے سادہ API)   

ایونٹس پر مبنی پارسر جو ترتیب وار XML پر کارروائی کرتا ہے۔ یہ میموری کے استعمال کے لحاظ سے موثر ہے اور بڑی فائلوں کو ہینڈل کرنے میں تیز ہے، لیکن یہ پیچیدہ کاموں کو منظم کرنے کے لیے کم آسان ہو سکتا ہے۔   

5Untangle   

آسان رسائی کے لیے XML ڈیٹا کو Python اشیاء میں تبدیل کرتا ہے۔ یہ کم سے کم کوڈ کے ساتھ فوری پارسنگ کے لیے بہترین ہے۔ تاہم، یہ پیچیدہ XML ڈھانچے کے لیے کم لچک دار ہے۔   

اس ٹیوٹوریل کے لیے، آپ کو ضرورت ہوگی…

  • Python اور Requests لائبریری۔  

اگر آپ کے کمپیوٹر پر Python 3.x انسٹال نہیں ہے، تو آپ اسے یہاں سے ڈاؤن لوڈ کر سکتے ہیں۔ https://www.python.org/. ٹرمینل کھولیں اور pip کے ذریعے Requests انسٹال کریں:

pip install requests یا  pip3 install requests

  • Visual Studio Code(VS Code)

تمام ضروری کمانڈز کو چلانے کے لیے، آپ Visual Studio Code(VS Code) میں ٹرمینل استعمال کر سکتے ہیں۔ اسے سرکاری ویب سائٹ سے ڈاؤن لوڈ کریں سرکاری ویب سائٹ اور اپنے آپریٹنگ سسٹم کے لیے انسٹالیشن کی ہدایات پر عمل کریں۔

  • RSS فیڈ

RSS فیڈ XML فائل کا ایک خاص فارمیٹ ہے جو کسی ویب سائٹ سے خود بخود خبریں یا اپ ڈیٹس فراہم کرنے کے لیے استعمال ہوتا ہے۔ سیدھے الفاظ میں، یہ ایک قسم کی “تازہ ترین پوسٹس کی فہرست” ہے جس کی تشکیل اس طرح کی گئی ہے کہ پروگرام پڑھ سکیں۔

مثال کے طور پر، ہماری ویب سائٹ پر ٹیوٹوریلز کا ایک سیکشن موجود ہے۔ یہ جاننے کے لیے کہ کوئی نیا ٹیوٹوریل شائع ہوا ہے، روزانہ سائٹ چیک کرنے کے بجائے آپ RSS فیڈ استعمال کر سکتے ہیں، جو ایک XML فائل ہے اور اس میں تمام حالیہ پوسٹس کی معلومات ہوتی ہیں۔ ہم DataImpulse RSS فیڈ کو اس ٹیوٹوریل میں استعمال کریں گے۔ اب مطلوبہ لائبریریوں اور درج ذیل کوڈ کو دیکھتے ہیں۔

ElementTree

آئیے دیکھتے ہیں کہ RSS فیڈ سے XML ڈیٹا کو پارس کرنے کے لیے Python کے بلٹ ان ElementTree ماڈیول کا استعمال کیسے کریں۔  

پہلا مرحلہ اسے import کرنا ہے: xml.etree.ElementTree. عمل آسان ہے: ہم RSS فیڈ URL کو ایک GET درخواست بھیجتے ہیں، اور سرور XML ڈیٹا کے ساتھ جواب دیتا ہے۔ .content جواب کی attribute ہمیں خام بائٹ ڈیٹا فراہم کرتی ہے جسے ElementTree پارس کر سکتا ہے۔ استعمال کرتے ہوئے ET.fromstring()، ہم اس XML متن کو درخت کی ساخت میں تبدیل کرتے ہیں اور جڑ عنصر حاصل کرتے ہیں۔ اس کے اندر، زیادہ تر مواد کے اندر منظم ہوتا ہے <channel><item> عناصر

دی find() طریقہ پہلا مماثل عنصر واپس کرتا ہے، جبکہ findall() دیے گئے ٹیگ والے تمام ذیلی عناصر واپس کرتا ہے۔ یہاں، آئٹمز تمام عناصر کی فہرست ہے، ہر ایک ٹیوٹوریل یا مضمون کی نمائندگی کرتا ہے۔

کوڈ کی مثال:  


import xml.etree.ElementTree as ET
import requests

# URL of the RSS feed (from DataImpulse site)
FEED_URL = "https://dataimpulse.com/tutorials-category/web-scraping-seo/feed/"

# Download the XML data
response = requests.get(FEED_URL)
xml_data = response.content

# Parse the XML
root = ET.fromstring(xml_data)

# In RSS feeds, items are inside 
channel = root.find("channel")
items = channel.findall("item")

# Print titles and links of the items
for item in items:
   title = item.findtext("title")
   link = item.findtext("link")
   print(f"Title: {title}")
   print(f"Link: {link}\n")
      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      

آخر میں، ہم ہر آئٹم کا عنوان اور لنک نکال کر پرنٹ کرتے ہیں، اور findtext()، جو متن کا مواد براہ راست حاصل کرتا ہے۔ جب آپ اسکرپٹ چلاتے ہیں، تو آپ کو تمام ٹیوٹوریل عنوانات اور ان کے URLs کی صاف فہرست ملے گی۔  

lxml 

lxml ایک بیرونی لائبریری ہے جو ElementTree کی فعالیت کو بڑھاتی ہے اور XPath کی سپورٹ دیتی ہے، جو XML دستاویزات میں نیویگیٹ کرنے کی ایک استفساری زبان ہے۔ اس مثال میں، ہم استعمال کریں گے lxml.etree RSS فیڈ کو پارس کرنے اور پوسٹ کے عنوانات کو نکالنے کے لیے۔

ہم RSS فیڈ کو حاصل کرنے کے لیے استعمال کرتے ہیں requests.get()، بالکل پہلے کی طرح۔ جواب کا مواد دیا جاتا ہے etree.fromstring()، جو XML کو پارس کرتا ہے اور روٹ عنصر کو لوٹاتا ہے۔lxml میں XPath expressions کے ذریعے عناصر تلاش کیے جا سکتے ہیں، جس سے معیاری ElementTree طریقوں کے مقابلے میں نیویگیشن زیادہ تیز اور لچک دار ہو جاتی ہے۔


import requests
from lxml import etree

# URL of the RSS feed
FEED_URL = "https://dataimpulse.com/tutorials-category/web-scraping-seo/feed/"

# Download the XML data
response = requests.get(FEED_URL)
xml_data = response.content

# Parse XML
root = etree.fromstring(xml_data)
items = root.xpath("//channel/item")

# Show list of titles with numbers
print("Available blog posts:\n")
for item in items:
   title = item.findtext("title")
   print(title)
      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      

آخر میں، ہم ان <item> عناصر پر loop چلاتے، ہر پوسٹ کا عنوان findtext(“title”)، اور انہیں پرنٹ کریں۔

Minidom 

اس مثال میں ہم Python کی کم سے کم DOM implementation، Minidom، استعمال کرتے ہیں۔ یہ Python کی معیاری لائبریری کا حصہ ہے اور پوری XML دستاویز کو Document Object Model (DOM) کے طور پر میموری میں لوڈ کرتا ہے۔  

ہم استعمال کرتے ہیں minidom.parseString() XML کو پارس کرنے اور ایک DOM آبجیکٹ بنانے کے لیے (دستاویز). DOM کے دو مانوس طریقے ہم یہاں استعمال کریں گے۔ پہلا ہے۔ getElementsByTagName(“tag”,) جو دیئے گئے ٹیگ نام کے ساتھ تمام عناصر کو تلاش کرتا ہے۔ دوسرا ہے .firstChild.nodeValue جو نوڈ کے متنی مواد کو بازیافت کرتا ہے۔

آخر میں، ہم استعمال کرتے ہیں toprettyxml(). یہ ایک فارمیٹ شدہ XML لے آؤٹ میں پہلے آئٹم عنصر کو پرنٹ کرنے کے لیے استعمال کیا جاتا ہے۔   

Minidom کا استعمال کرتے ہوئے RSS فیڈ سے ڈیٹا پارس کرنے کا طریقہ یہاں ہے:


import requests
from xml.dom import minidom

# URL of the RSS feed
FEED_URL = "https://dataimpulse.com/tutorials-category/web-scraping-seo/feed/"

# Download XML data
response = requests.get(FEED_URL)
xml_data = response.content

# Parse XML with minidom
doc = minidom.parseString(xml_data)

# Get all  elements
items = doc.getElementsByTagName("item")

print(f"Total articles found in feed: {len(items)}\n")

# Show titles with links
for i, item in enumerate(items, start=1):
   title = item.getElementsByTagName("title")[0].firstChild.nodeValue
   link = item.getElementsByTagName("link")[0].firstChild.nodeValue
   print(f"{i}. {title}")
   print(f"   Link: {link}\n")

# Show raw XML of the first  (just for demo)
print("First  as raw XML:\n")
print(items[0].toprettyxml())
      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      

SAX 

SAX XML کو ترتیب وار، ایک ایک عنصر کر کے پڑھتا ہے۔ یہ XML کے ہر حصے پر مخصوص ایونٹس متحرک کرتا ہے:

  • startElement(name, attrs) → جب ٹیگ شروع ہو۔
  • characters(content) → جب ٹیگز کے درمیان متن پڑھا جائے۔
  • endElement(name) → جب ٹیگ ختم ہو۔

کوڈ کو فائل میں محفوظ کریں اور اسے چلائیں:  


import requests
import xml.sax

# Custom handler for SAX parsing
class RSSHandler(xml.sax.ContentHandler):
   def __init__(self):
       super().__init__()
       self.current_tag = ""
       self.in_item = False
       self.title = ""
       self.link = ""
       self.counter = 0

   def startElement(self, name, attrs):
       if name == "item":
           self.in_item = True
           self.title = ""
           self.link = ""
       self.current_tag = name

   def characters(self, content):
       if self.in_item:
           if self.current_tag == "title":
               self.title += content
           elif self.current_tag == "link":
               self.link += content

   def endElement(self, name):
       if name == "item":
           self.counter += 1
           print(f"{self.counter}. {self.title.strip()}")
           print(f"   Link: {self.link.strip()}\n")
           self.in_item = False
       self.current_tag = ""

# Download the XML feed
FEED_URL = "https://dataimpulse.com/tutorials-category/web-scraping-seo/feed/"
response = requests.get(FEED_URL)
xml_data = response.content

# Parse XML with SAX
print("Parsing RSS feed with SAX...\n")
handler = RSSHandler()
xml.sax.parseString(xml_data, handler)

print(f"Total items parsed: {handler.counter}")
      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      

اس طریقے کا فائدہ میموری کے مؤثر استعمال میں ہے، کیونکہ یہ پوری دستاویز کو محفوظ نہیں کرتا ہے۔  

Untangle

یہ XML کو سنبھالنے کا نسبتاً آسان طریقہ ہے۔Untangle لائبریری XML دستاویزات کو Python اشیاء میں تبدیل کرتی ہے۔ اس کا مطلب ہے کہ دستی element traversal یا event handling کی ضرورت نہیں ہے۔  

جب آپ XML کو پارس کرتے ہیں untangle.parse(), یہ XML فائل کو خود بخود پڑھتا ہے، ہر XML ٹیگ کو Python آبجیکٹ میں تبدیل کرتا ہے، اور ٹیگ کا ڈیٹا محفوظ کرتا ہے .cdata attribute میں محفوظ کرتا ہے، اگر وہ متنی مواد ہو۔ نوڈس یا ایونٹس کے ساتھ کام کرنے کے بجائے، آپ صرف XML ڈھانچے کو ایک عام Python آبجیکٹ کی طرح نیویگیٹ کرتے ہیں۔  

یہاں کوڈ ہے:


import requests
import untangle
from io import BytesIO

# RSS feed from DataImpulse
FEED_URL = "https://dataimpulse.com/tutorials-category/web-scraping-seo/feed/"

# Download XML
resp = requests.get(FEED_URL)
resp.raise_for_status()
xml_bytes = resp.content

# Parse XML with untangle (use BytesIO for bytes input)
doc = untangle.parse(BytesIO(xml_bytes))

# Get all  elements
items = doc.rss.channel.item

print("Articles from DataImpulse RSS:\n")

# Print articles
for i, it in enumerate(items, start=1):
   title = it.title.cdata if hasattr(it, "title") else ""
   link = it.link.cdata if hasattr(it, "link") else ""
   desc = it.description.cdata if hasattr(it, "description") else ""
  
   print(f"{i}. {title}")
   print(f"   Link: {link}")
   if desc:
       print(f"   Description: {desc}")
   print()

      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      

چند اضافی تجاویز

  • پارسنگ کے دوران غلطیوں کی جانچ کریں۔

بعض اوقات فیڈز دستیاب نہ ہوں یا غیر متوقع ٹیگز پر مشتمل ہوں۔ ایسی صورت میں XML ڈاؤن لوڈ یا پارس کرتے وقت try/except استعمال کریں۔

  • استعمال کریں .content کو XML ڈاؤن لوڈز کے لیے

دی .content attribute خام بائٹ ڈیٹا لوٹاتا ہے، جو انکوڈنگ کے مسائل کو روکتا ہے۔ .text attribute ان مسائل کا باعث بن سکتی ہے۔

  • تصدیق کریں کہ عناصر موجود ہیں۔  

ہر XML فائل کا ڈھانچہ ایک جیسا نہیں ہوتا ہے۔ ٹیگز تک رسائی سے پہلے ایسی شرط استعمال کریں جیسے if item.find(‘title’) is not None ۔

  • بڑی فائلوں کے لیے وسائل کے استعمال پر توجہ دیں۔

بڑی XML دستاویزات کے لیے SAX استعمال کریں، جو ہر چیز کو میموری میں لوڈ کیے بغیر ترتیب وار ڈیٹا پڑھتا ہے۔

بیرونی سائٹس سے XML حاصل کرنا مشکل ہو سکتا ہے۔ پراکسی مختلف مقامات سے ہموار رسائی اور رازداری برقرار رکھنے میں مدد دیتی ہیں۔

کلیدی جھلکیاں

  • XML کو پارس کرنا XML فائلوں کو پڑھنے اور ڈیٹا کو ایک منظم، قابل استعمال طریقے سے نکالنے کا عمل ہے۔
  • ElementTree XML عناصر کو نیویگیٹ کرنے اور نکالنے کے لیے درخت پر مبنی طریقہ فراہم کرتا ہے۔
  • lxml ایک لائبریری ہے جو تیز تر XML پارس کرنے کے لیے XPath queries کو سپورٹ کرتی ہے۔
  • Minidom پورے XML کو ایک DOM درخت کے طور پر لوڈ کرتا ہے، جس سے آپ کو ایک structured object کی طرح نوڈس اور متن تک رسائی حاصل ہوتی ہے۔
  • SAX بڑی XML فائلوں کے لیے مثالی ہے کیونکہ یہ ہر چیز کو میموری میں رکھے بغیر XML کو مرحلہ وار پروسیس کرتا ہے۔
  • Untangle صرف ٹیگز اور ان کے مواد تک رسائی کے لیے XML کو Python اشیاء میں تبدیل کرتا ہے۔

متعلقہ مضامین  

Python درخواستوں کے ساتھ پراکسی کو مربوط کرنا

Python اور پراکسیز کے ساتھ eBay کو کیسے کھرچنا ہے۔

DataImpulse پراکسیز کو Java میں کنفیگر کرنے کا طریقہ

Amazon پروڈکٹ ڈیٹا کو Python کے ساتھ سکریپ کرنا

Python کے ساتھ ایک حسب ضرورت پراکسی روٹیٹر بنانا

Python اور Selenium کا استعمال کرتے ہوئے سیکیورٹی چیک کو سنبھالنا

Share article: