سامانه کرالر

سامانه کرالر

سامانه کرالر

سامانه کرالر ساده

سامانه کرالر یا خزنده برای بسیاری از افراد نا آشنا است.

همچنین طراحی سامانه کرالر نیز دشوار و پیچیده است.

تنوع زیاد نرم افزارهای برنامه نویسی نیز این سختی را دو چندان می کند.

در این پست قصد داریم با استفاده از نرم افزار برنامه نویسی پایتون و به ساده ترین روش به طراحی سامانه کرالر ساده بپردازیم.

ابتدا نرم افزار پایتون را اجرا کرده و سپس کد دستوری اسپایدر را به صورت زیر تایپ می کنیم.

 

>>> spidre(http://www.dreamhost.com, “secure”, 200)

 

این کد برای فراخوانی سیستم عنکبوتی جهت شروع جستجو است.

در کادر بعد از کلمه spider آدرس سایت مورد نظر و کلمه ای که می خواهید خزنده آن را جستجو کند باید نوشته شود.

بعد از آن سامانه کرالر شروع به کار کرده و به ترتیب تمام آدرس های احتمالی و مشابه با آدرس مورد تایپ شده را جستجو می کند.

و در آخرین خط نیز تعداد صفحاتی که مورد جستجو قرار گرفته را به شما نشان می دهد.

۱ Visiting: http://www.dreamhost.com

**Success!**

۲ Visiting: http://dreamhost.com

**Success!**

۳ Visiting: http://panel.dreamhost.com/

**Success!**

۴ Visiting: http://www.dreamhost.com/webmail/

**Success!**

۵ Visiting: http://webftp.dreamhost.com/

**Success!**

۶ Visiting: http://www.dreamhost.com/

**Success!**

۷ Visiting: http://www.dreamhost.com/domains/

**Success!**

۸ Visiting: http://www.dreamhost.com/web-hosting/

**Success!**

The word secure was found at http://dreamhost.com/web-hosting/

اما  این عملیات نیاز به یک سری کد نویسی اصلی برای طراحی سامانه کرالر دارد.

این کد نویسی به صورت فانکشن در نرمم افزار پایتون پیاده سازی شده و البته باید قبل از کدنوسیس فوق قرارداده شود.

 

قسمت اول: معرفی هدف به سامانه کرالر

from html.parser import HTMLParser

from urllib.request import urlopen

from urllib import parser

# We are going to create a class called LinkParser that inherits some

# methods from HTMLParser which is why it is passed into the definition

class LinkParser(HTMLParser):

# This is a function that HTMLParser normally has

# but we are adding some functionality to it

def handle_starttag(self, tag, attrs):

# We are looking for the begining of a link. Links normally look

# like <a href=”www.someurl.com”></a>

if tag  ‘a’:

for (key, value) in attrs:

if key  ‘href’:

 

قسمت دوم : شفاف سازی برای سامانه کرالر

# We are grabbing the new URL. We are also adding the

# base URL to it. For example:

# www.netinstructions.com is the base and

# somepage.html is the new URL (a relative URL)

#

# We combine a relative URL with the base URL to create

# an absolute URL like:

# www.netinstructions.com/somepage.html

newUrl = parse.urljoin(self.baseUrl, value)

# And add it to our colection of links:

self.links = self.links + [newUrl]

# This is a new function that we are creating to get links

# that our spider() function will call

def getLinks(self, url):

self.links = []

# Remember the base URL which will be important when creating

# absolute URLs

self.baseUrl = url

# Use the urlopen function from the standard Python 3 library

response = urlopen(url)

# Make sure that we are looking at HTML and not other things that

# are floating around on the internet (such as

# JavaScript files, CSS, or .PDFs for example)

if response.getheader(‘Content-Type’)==’text/html’:

htmlBytes = response.read()

# Note that feed() handles Strings well, but not bytes

# (A change from Python 2.x to Python 3.x)

htmlString = htmlBytes.decode(“utf-8”)

self.feed(htmlString)

return htmlString, self.links

else:

return “”,[]

 

قسمت سوم : دستور بستن عملیات

# And finally here is our spider. It takes in an URL, a word to find,

# and the number of pages to search through before giving up

def spider(url, word, maxPages):

pagesToVisit = [url]

numberVisited = 0

foundWord = False

# The main loop. Create a LinkParser and get all the links on the page.

# Also search the page for the word or string

# In our getLinks function we return the web page

# (this is useful for searching for the word)

 

قسمت چهارم : دستور نمایش و پرینت

# and we return a set of links from that web page

# (this is useful for where to go next)

while numberVisited < maxPages and pagesToVisit != [] and not foundWord:

numberVisited = numberVisited +1

# Start from the beginning of our collection of pages to visit:

url = pagesToVisit[0]

pagesToVisit = pagesToVisit[1:]

try:

print(numberVisited, “Visiting:”, url)

parser = LinkParser()

data, links = parser.getLinks(url)

if data.find(word)>-1:

foundWord = True

# Add the pages that we visited to the end of our collection

# of pages to visit:

pagesToVisit = pagesToVisit + links

print(” **Success!**”)

except:

print(” **Failed!**”)

if foundWord:

print(“The word”, word, “was found at”, url)

else:

print(“Word never found”)

همانطور که می دانید خزنده وب نوعی نرم افزار کد نویسی شده است.

این نرم افزار برای جمع آوری اطلاعات و مرور داده ها در اینترنت برنامه نویسی شده است.

این نرم افزار فقط کدهای text و html و لینکهای صفحات سایت را مورد بررسی قرار می دهد و تصویر و ویدیو برای آن مفهومی ندارد.

پس با بررسی صفحات سایت ها، سامانه کرالر به نوع اطلاعات را جستجو می کند.

نوع اول تمام متون موجود در صفحه و نوع دوم تمام لینکها.

البته گاهی ممکن است کلمه مورد نظر شما را در جستجو از یک صفحه پیدا نکند.

در این صورت به طور خودکار و به صورت پیش فرض به لینک سایت مورد نظر پسوند یا پیشوند اضافه می کند.

اینکار باعث می شود تمامی ادرس های احتمالی که به سایت مورد نظر شما شبیه هستند جستجو شود.

و سپس به جستجوی کلمه مورد نظر می پردازد .

سامانه کرالر اینکار را آنقدر تکرار کرده تا کلمه هدف را پیدا نماید.

۱۳۹۷/۳/۱۶ ۶:۲۴:۵۸