RSS
 

Простой паук, часть 2

20 Окт

В этом посте я продолжу освещать написание простого паука. Ну естественно подходим к самому интересному моменту – а именно индексации собственными руками. Ниже я  расскажу  как получить список  проиндексированных страниц с выбранного ресурса…

Перед тем как остановиться на написание самого кода паука, хотелось бы остановиться на простом скрипте. Этот скрипт сильно сэкономит время во время отладки и написания кода основного паука.

import searchengine
import sys
pagelist=[]
pagelist.append(str(sys.argv[1]))
spider1=searchengine.spider('')
spider1.spider(pagelist)

Этот скрипт в дальнейшкм можно дополнять, но на данный момент он делает следующее.
Первая строчка позволяет импортировать основной файл паука.
Остановимся на следующих строчках:

pagelist.append(str(sys.argv[1]))

Они будут содержать начальные адреса страниц, с которых начнётся процесс индексации.
Воспользоваться этим скриптом достаточно просто. Назовём его scriptname.

chmod u+x scriptname
./scriptname "http://lifeisfine.ru"

Результатом работы скрипта будет печать проиндексированных страниц.

Ну а теперь перейдём к написанию непосредственно скрипта.
Простой паук будет индексировать файлы из интернета.

import urllib2
import BeautifulSoup
from BeautifulSoup import *
from urlparse import urljoin
ignorewords=set(['the','of','to','and','a','in','is','it'])

Верхние строчки позволяют импортировать необходимые библиотеки. Но следует отметить, что библиотеку BeautifulSoup необходимо предварительно установить. Я решил посвятить следующий пост непосредственно установке. В случае операцинной системы Линукс UBUNTU

sudo apt-get install python-beautifulsoup

Ниже необходимо добавить следующий код
для функции класса spider:

class spider:
	def __init__(self,dbname):
		pass
	def __del__(self):
		pass
	def dbcommit(self):
		pass
	def addtoindex(self,url,soup):
		print "Indexing %s" % url
	def spider(self,pages,depth=2):
		for i in range(depth):
			newpages=set()
			for page in pages:
				try:
					c=urllib2.urlopen(page)
				except:
					print "It is impossible to open" % page
					continue
 
#Основная нагрузка лежит на этой функции
				soup=BeautifulSoup(c.read())
				self.addtoindex(page,soup)
				links=soup('a')
			#	print links
				for link in links:
					if ('href' in dict(link.attrs)):
						url=urljoin(page,link['href'])
						if url.find("'")!=-1: continue
						url=url.split('#')[0]
						if url[0:4]=='http' :
							newpages.add(url)
 
			pages=newpages

Следующий код просто будет печатать названия страниц, которые будут поочерёдно обходиться. Непосредственно следующий участок кода простого паука отвечает за печать названия этих страниц.

def addtoindex(self,url,soup):
		print "Indexing %s" % url

Основная нагрузка лежит на следующей строчке:

soup=BeautifulSoup(c.read())

Эта часть кода позволяет задать класса, и в дальнейшем пользоваться встроенными функциями в этот класс.
Эта часть простого паука имеет ряд недостатков .
Но в целом на данный момент эта часть позволяет ползать по страницам, печатая ссылки. Так , что дальше будут описаны функции добавления основных параметров в базу данных.
Через ряд постов получим полуполноценную поисковую машину в полустепени. Этот простой паук будет ползать по интернету и решать наши локальные задачи.

Google Bookmarks Reddit Technorati Yahoo My Web БобрДобр.ru Memori.ru МоёМесто.ru
 
Нет комментариев

Опубликовано в рубрике Индексация

 

Прокомментировать

 
 
 
Система Orphus

Enter your email address:

Delivered by FeedBurner

.