چگونه در زبان پایتون یک Web Crawler ساده بنویسیم؟

سیده آمین ارمان

کاربر نگاه دانلود
کاربر نگاه دانلود
عضویت
2016/05/10
ارسالی ها
1,730
امتیاز واکنش
20,744
امتیاز
795
محل سکونت
البرز
در این مقاله می خواهیم روش پخت ساخت یک وب کراولر در زبان برنامه نویسی پایتون را توضیح دهیم. وب کراولر (Web Crawler) به برنامه ای گفته می شود که به صورت از پیش تعیین شده، خودکار و قابل تنظیم، بر روی شبکه جهانی وب جستجو می کند و بر روی مطالب جستجو شده، اعمال خاصی را انجام می دهد. موتورهای جستجو همانند گوگل و یاهو همواره از وب کراولرهایی استفاده می کنند تا سایت های جهان را جستجو کرده و اطلاعات خود را به روز نگاه دارند. با سکان آکادمی همراه باشید تا روش ساخت یک کراولر ساده در زبان پایتون را مرور کنیم.

Ebhose.io نام شرکتی است که اطلاعات زنده ی هزاران سایت، فروم، اخبار و وبلاگ را به طور مستقیم در اختیار کاربران می گذارد. چندی پیش، این سایت مقاله ای را منتشر کرد که در آن، نحوه ی ساخت یک وب کراولر کوچک و چندکاره در زبان برنامه نویسی پایتون را شرح داده است. این وب کراولر قادر است تا تمامی اطلاعات یک سایت را برای شما، به اصطلاح «کراول» کند. طراح این کراولر، Ran Geva، درباره ی برنامه ی خود می گوید:

"می گویند که کد من «کثیف»، «نا مطئمن» و «بد» است. من می گویم که این کراولر کار می کند و هزاران صفحه را از چند صفحه، در عرض چند ساعت دانلود می کند. شما برای استفاده از این کراولر، نیاز به هیچگونه تنظیمات و یا لینک برنامه های دیگر ندارید. تنها کافیست که آدرس سایتی را به این کراولر داده و سپس با خیال راحت در صندلی خود نشسته و تماشا کنید. البته شاید بهتر باشد به سراغ کارهای دیگرتان بروید چون شاید چند ساعت و یا چند روز، بسته به میزان اطلاعاتی که می خواهید، کار این کراولر طول بکشد."

این کراولر پایتون بسیار ساده و پر سرعت است. این کراولر توانایی شناسایی و حذف لینک های یکسان (Duplicate) را نیز دارد و می تواند هم سورس و هم لینک را ذخیره کند. بدین ترتیب می توان لینک های خروجی و ورودی را محاسبه کرده و رتبه ی سایت را تخمین زد. این کراولر کاملاً رایگان بوده و کد آن نیز به شرح زیر است:

import sys, thread, Queue, re, urllib, urlparse, time, os, sys
dupcheck = set()
q = Queue.Queue(100)
q.put(sys.argv[1])
def queueURLs(html, origLink):
for url in re.findall('''<a[^>]+href=["'](.[^"']+)["']''', html, re.I):
link = url.split("#", 1)[0] if url.startswith("http") else '{uri.scheme}://{uri.netloc}'.format(uri=urlparse.urlparse(origLink)) + url.split("#", 1)[0]
if link in dupcheck:
continue
dupcheck.add(link)
if len(dupcheck) > 99999:
dupcheck.clear()
q.put(link)
def getHTML(link):
try:
html = urllib.urlopen(link).read()
open(str(time.time()) + ".html", "w").write("" % link + "\n" + html)
queueURLs(html, link)
except (KeyboardInterrupt, SystemExit):
raise
except Exception:
pass
while True:
thread.start_new_thread( getHTML, (q.get(),))
time.sleep(0.5)
برای استفاده از آن، می بایست کد بالا را با نامی دلخواه مثلاً «myPythonCrawler.py» ذخیره کرده و سپس آدرس وب سایتی را به عنوان نقطه ی شروع برای آن تعیین کنید:

python myPythonCrawler.py
Please, ورود or عضویت to view URLs content!
 

برخی موضوعات مشابه

بالا