محمد بلال اعظم
لائبریرین
یہاں الف ب ہی تو سکھا رہے ہیں۔
تو پھر مجھے بھی سیکھنا ہے۔
یہاں الف ب ہی تو سکھا رہے ہیں۔
ایک ویب پیج میں سے تمام روابط اخذ کرنے کے لیے ایک فنکشن۔
PHP:def fd(page): a=[] while True: stlink=page.find("href=") if stlink==-1: break tmp=page[stlink+6:] edlink=tmp.find("\"") link=tmp[:edlink] page=tmp[edlink:] a.append(link) return a
PHP:>>> p=''' The Python Software Foundation is a non-profit corporation. <a href="http://www.python.org/psf/donations/">Please donate.</a> <br /> Last updated on Oct 11, 2012. <a href="../bugs.html">Found a bug</a>? <br /> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.''' >>> d=fd(p) >>> d ['http://www.python.org/psf/donations/', '../bugs.html', 'http://sphinx.pocoo.org/'] >>>
def get_next_target(page):
start_link = page.find('<a href=') # start of link tag
if start_link == -1: # if link tage not found then return None and 0
return None,0
start_quote = page.find('"',start_link) # index of first quote in link tag
end_quote = page.find('"',start_quote+1) # index of second quote in link tag
url = page[start_quote+1:end_quote] # extracting string between start quote and end quote
return url, end_quote # returing URL and the index of ending quote of link string
def print_all_links(page):
while True:
url, endpos = get_next_target(page)
if url:
print (url)
page = page[endpos:]
else:
break
import urllib
response = urllib.request.urlopen('http://www.urduweb.org/')
page = str(response.read())
print_all_links(page)
import urllib.request
def get_next_target(page):
start_link = page.find('<a href=') # start of link tag
if start_link == -1: # if link tage not found then return None and 0
return None,0
start_quote = page.find('"',start_link) # index of first quote in link tag
end_quote = page.find('"',start_quote+1) # index of second quote in link tag
url = page[start_quote+1:end_quote] # extracting string between start quote and end quote
return url, end_quote # returing URL and the index of ending quote of link string
def print_all_links(page):
while True:
url, endpos = get_next_target(page) # calling function to get link and end position of lin i.e. second quote(")
if url: # if url has some value(not empty hence true)
print (url) # then print url and
page = page[endpos:] # reassign page starting from the end of the found url and rest of the remaining page string
else:
break
# opening a given url using URLLIB module
response = urllib.request.urlopen('http://www.urduweb.org/')
# reading the file handle and converting it into a string using str() function
page = str(response.read())
# calling print_all_links function to further call get_next_target function and print all links in a page
print_all_links(page)
http://www.urduweb.org/
http://www.urduweb.org/
http://www.urduweb.org/blog/
http://www.urduweb.org/planet/
http://www.urduweb.org/mehfil/
http://www.urduweb.org/downloads/
http://wordpress.org/
جس طرح محمدصابر نے بتایا کہ پائتھون پر بالکل بنیاد سے دھاگے شروع کیے گئے ہیں اور کسی بھی قسم کا سوال ہو تو اس کا جواب دیا جائے گا بشرطیکہ کوئی سیکھنے میں سنجیدہ ہو۔تو پھر مجھے بھی سیکھنا ہے۔
بہت شکریہ۔میں پہلے بھی آیا تھا اس دھاگے پر لیکن کیا کروں ابھی کوئی روٹین نہیں بن پارہیجس طرح محمدصابر نے بتایا کہ پائتھون پر بالکل بنیاد سے دھاگے شروع کیے گئے ہیں اور کسی بھی قسم کا سوال ہو تو اس کا جواب دیا جائے گا بشرطیکہ کوئی سیکھنے میں سنجیدہ ہو۔
ویسے اگر میرا ٹیگ دیکھا ہو تو میں نے دو لوگوں کو خصوصی ٹیگ کیا تھا
محمد بلال اعظم
حسیب نذیر گِل
PHP:def get_next_target(page): start_link = page.find('<a href=') # start of link tag if start_link == -1: # if link tage not found then return None and 0 return None,0 start_quote = page.find('"',start_link) # index of first quote in link tag end_quote = page.find('"',start_quote+1) # index of second quote in link tag url = page[start_quote+1:end_quote] # extracting string between start quote and end quote return url, end_quote # returing URL and the index of ending quote of link string
آپ کا مطلب ہے کہ بندہ کوشش بھی نہ کرے۔اتفاق سے اس کوڈ میں کچھ مسائل ہیں جن کو بہتر کیاجا سکتا ہے۔ اول تو یہ کہ لنک ٹیگ کی ابتدا بالکل ویسی ہو جیسا آپ نے مان لیا ہے، یہ ضروری نہیں۔ اینگل بریکٹ کے فوراً بعد a تو آئے گا لیکن اس کے فوراً بعد ایک اسپیس کے ساتھ href ایٹریبیوٹ ہی آئے یہ بالکل بھی ضروری نہیں۔ اس کی جگہ class, id, style, title یا کوئی بھی دوسرا ایٹریبیوٹ وہاں آ سکتا ہے۔ href بھی کہیں نہ کہیں ضرور ہوگا لیکن اینکر ٹیگ کے ایٹریبیوٹس میں اس کی ترتیب کچھ بھی ہو سکتی ہے۔ دوسرا مسئلہ یہ ہے کہ ہائپر ریفرینس (href) کی قدر کو "ڈبل کوٹس" میں تصور کیا گیا ہے۔ گو کہ یہ بیسٹ پریکٹس ہے لیکن کئی دفعہ لوگ اس کو سنگل کوٹس میں بھی رکھتے ہیں (کئی دفعہ بغیر کوٹس کے بھی اس کو لکھ دیا جائے تو کچھ براؤزر اسے درست انٹرپریٹ کر لیتے ہیں لیکن اس طرح لکھنا غلط ہے اس لیے اس صورت کو ترک کیا جا سکتا ہے)۔ اس کے بر عکس نمرہ بٹیا رانی کے ابتدائی کوڈ کا یہ مسئلہ تھا کہ انھوں نے صرف href پر تکیہ کیا تھا جب کہ یہ ایٹریبیوٹ اینکر ٹیگ کے علاوہ بھی استعمال ہوتا ہے مثلاً link ٹیگ میں جو کہ اسٹائل شیٹ، آر ایس ایس فیڈ اور ایسے ہی دیگر وسائل کو مربوط کرنے کے لیے استعمال ہوتے ہیں اور صفحے پر نظر نہیں آتے۔ خیر اس کو درست طریقے سے حاصل کرنے کے لیے ریگیولر ایکسپریشن استعمال کیا جا سکتا ہے یا پھر دوسرے اسٹرنگ آپریشنز۔
خیر یہ تو ہوا نصف قصہ جو اسٹرنگ کی ایکسرسائز تک ٹھیک ہے لیکن اس کوڈ کو یوٹیلٹی بنانے کے لیے ابھی مزید کام کرنا ہوگا۔ اور وہ ہے مکمل روابط کا حصول۔ کیوں کہ اکثر ہائپر ریفرینس کی قدر مکمل یو آر ایل کی شکل میں نہیں ہوتی جو اسے پورٹیبل بناتی ہے۔ اس کی ویلیو موجودہ صفحے کے یو آر ایل کے تحت کسی ریلیوٹیو پاتھ یا ایبسولیوٹ پاتھ کے ساتھ ہو سکتی ہے یا پھر ڈومین نیم اور پروٹوکول کے ساتھ ایبسولیوٹ یو آر ایل۔ کئی دفعہ تو صرف پروٹوکول ہٹا دیا جاتا ہے تاکہ ایچ ٹی ٹی پی اور ایچ ٹی ٹی پی ایس دونوں پر یکساں کام کرے۔ اس کے علاوہ اگر صفحے میں کوئی base ٹیگ موجود ہے تو بجائے صفحے کے یو آر ایل کے، تمام ریلیوٹیو اور ایبسولیوٹ پاتھ base ٹیگ کے href قدر کے حوالے سے کیلکیولیٹ کیے جاتے ہیں۔
اور آپ چاہتے ہیں کہ ہم تبصرے کرنا ترک کر دیں؟آپ کا مطلب ہے کہ بندہ کوشش بھی نہ کرے۔
ویسے تبصرے تو آپ نے اپنی مرضی سے کرنے ہیں اتنے تو بالکل نہیں کرنے جتنے میں یا ہم چاہتے ہیں۔اور آپ چاہتے ہیں کہ ہم تبصرے کرنا ترک کر دیں؟
ایسا تو نہیں کہ ہم نے کسی کی کوشش کی پذیرائی نہیں کی لیکن what is next کا اسکوپ تو ہر چیز میں ہوتا ہے۔
در اصل ہم اپنی بات کو مثالوں سے واضح کرتے تو مراسلہ کافی طویل ہو جاتا اس لیے شاید کچھ باتیں اجنبی لگی ہوں گی۔ لیکن فکر نہ کریں، ٹیکسٹ پارسنگ میں کارنر کیسیز تو ہوتے ہی ہیں۔ویسے تبصرے تو آپ نے اپنی مرضی سے کرنے ہیں اتنے تو بالکل نہیں کرنے جتنے میں یا ہم چاہتے ہیں۔
وٹ از نیکسٹ کے لئے یہ اُوپر جو مراسلہ ہے محب علوی کے لئے تو ہو سکتا ہے۔ محمد صابر یا محمد احمد کے لئے نہیں۔
جس طرح محمدصابر نے بتایا کہ پائتھون پر بالکل بنیاد سے دھاگے شروع کیے گئے ہیں اور کسی بھی قسم کا سوال ہو تو اس کا جواب دیا جائے گا بشرطیکہ کوئی سیکھنے میں سنجیدہ ہو۔
ویسے اگر میرا ٹیگ دیکھا ہو تو میں نے دو لوگوں کو خصوصی ٹیگ کیا تھا
محمد بلال اعظم
حسیب نذیر گِل
اسی طویل مراسلے کے لئے تو کوشش کر رہا ہوں۔ ویسے کوئی بات اجنبی نہیں لگی۔در اصل ہم اپنی بات کو مثالوں سے واضح کرتے تو مراسلہ کافی طویل ہو جاتا اس لیے شاید کچھ باتیں اجنبی لگی ہوں گی۔ لیکن فکر نہ کریں، ٹیکسٹ پارسنگ میں کارنر کیسیز تو ہوتے ہی ہیں۔
پیارے، اس تفصیل میں گئے تو وہ پائتھون کی پوسٹ کم اور ایچ ٹی ایم ایل کی زیادہ لگنے لگے گی۔اسی طویل مراسلے کے لئے تو کوشش کر رہا ہوں۔ ویسے کوئی بات اجنبی نہیں لگی۔
چلیں اس کوشش میں طالبعلم تو کچھ سیکھے گا ۔ جس پر ایسا کوڈ دیکھتے ہی ٹھک ٹھک ٹھک سوال آنے شروع ہو جاتے ہیں۔پیارے، اس تفصیل میں گئے تو وہ پائتھون کی پوسٹ کم اور ایچ ٹی ایم ایل کی زیادہ لگنے لگے گی۔
چلیں اس کوشش میں طالبعلم تو کچھ سیکھے گا ۔ جس پر ایسا کوڈ دیکھتے ہی ٹھک ٹھک ٹھک سوال آنے شروع ہو جاتے ہیں۔
بہت شکریہ۔میں پہلے بھی آیا تھا اس دھاگے پر لیکن کیا کروں ابھی کوئی روٹین نہیں بن پارہی
آج میں ڈیٹا بیس والے دھاگے پر جارہا ہوں وہاں سر کھپانے کا رادہ ہے
اتفاق سے اس کوڈ میں کچھ مسائل ہیں جن کو بہتر کیاجا سکتا ہے۔ اول تو یہ کہ لنک ٹیگ کی ابتدا بالکل ویسی ہو جیسا آپ نے مان لیا ہے، یہ ضروری نہیں۔ اینگل بریکٹ کے فوراً بعد a تو آئے گا لیکن اس کے فوراً بعد ایک اسپیس کے ساتھ href ایٹریبیوٹ ہی آئے یہ بالکل بھی ضروری نہیں۔ اس کی جگہ class, id, style, title یا کوئی بھی دوسرا ایٹریبیوٹ وہاں آ سکتا ہے۔ href بھی کہیں نہ کہیں ضرور ہوگا لیکن اینکر ٹیگ کے ایٹریبیوٹس میں اس کی ترتیب کچھ بھی ہو سکتی ہے۔ دوسرا مسئلہ یہ ہے کہ ہائپر ریفرینس (href) کی قدر کو "ڈبل کوٹس" میں تصور کیا گیا ہے۔ گو کہ یہ بیسٹ پریکٹس ہے لیکن کئی دفعہ لوگ اس کو سنگل کوٹس میں بھی رکھتے ہیں (کئی دفعہ بغیر کوٹس کے بھی اس کو لکھ دیا جائے تو کچھ براؤزر اسے درست انٹرپریٹ کر لیتے ہیں لیکن اس طرح لکھنا غلط ہے اس لیے اس صورت کو ترک کیا جا سکتا ہے)۔ اس کے بر عکس نمرہ بٹیا رانی کے ابتدائی کوڈ کا یہ مسئلہ تھا کہ انھوں نے صرف href پر تکیہ کیا تھا جب کہ یہ ایٹریبیوٹ اینکر ٹیگ کے علاوہ بھی استعمال ہوتا ہے مثلاً link ٹیگ میں جو کہ اسٹائل شیٹ، آر ایس ایس فیڈ اور ایسے ہی دیگر وسائل کو مربوط کرنے کے لیے استعمال ہوتے ہیں اور صفحے پر نظر نہیں آتے۔ خیر اس کو درست طریقے سے حاصل کرنے کے لیے ریگیولر ایکسپریشن استعمال کیا جا سکتا ہے یا پھر دوسرے اسٹرنگ آپریشنز۔
خیر یہ تو ہوا نصف قصہ جو اسٹرنگ کی ایکسرسائز تک ٹھیک ہے لیکن اس کوڈ کو یوٹیلٹی بنانے کے لیے ابھی مزید کام کرنا ہوگا۔ اور وہ ہے مکمل روابط کا حصول۔ کیوں کہ اکثر ہائپر ریفرینس کی قدر مکمل یو آر ایل کی شکل میں نہیں ہوتی جو اسے پورٹیبل بناتی ہے۔ اس کی ویلیو موجودہ صفحے کے یو آر ایل کے تحت کسی ریلیوٹیو پاتھ یا ایبسولیوٹ پاتھ کے ساتھ ہو سکتی ہے یا پھر ڈومین نیم اور پروٹوکول کے ساتھ ایبسولیوٹ یو آر ایل۔ کئی دفعہ تو صرف پروٹوکول ہٹا دیا جاتا ہے تاکہ ایچ ٹی ٹی پی اور ایچ ٹی ٹی پی ایس دونوں پر یکساں کام کرے۔ اس کے علاوہ اگر صفحے میں کوئی base ٹیگ موجود ہے تو بجائے صفحے کے یو آر ایل کے، تمام ریلیوٹیو اور ایبسولیوٹ پاتھ base ٹیگ کے href قدر کے حوالے سے کیلکیولیٹ کیے جاتے ہیں۔