Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Black Python. Практические примеры. Часть 1.
цитата
27/06/07 в 15:07
 dadalov
Привожу ниже пример парсера Google на питоне. Легко расширяется для других поисковых систем. В следующей части будет описана многопоточность. Как параметр запуска скрипта указывается путь к файлу с запросами.

Код:
import sys, urllib, urllib2, re

class BaseClass:

   def log(self, id, message):
       #print "%s:\t%s" % (id, message)
       pass


class HttpClient(BaseClass):

   userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"

   def setUserAgent(self, userAgent=None):
       self.userAgent = userAgent

   def getPage(self, url=None):
       if url is None:
           url = self.url
       self.log("HttpClient",url)
       req = urllib2.Request(url)
       req.add_header('User-Agent', self.userAgent)
       return urllib2.urlopen(req).read()


class SearchEngineParser(HttpClient):

   params = {}

   def addParam(self, name, value):
       self.params[name] = value

   def setServiceUrl(self, url):
       self.serviceUrl = url
       self.updateUrl()

   def setSearchRule(self, rule):
       self.searchRule = re.compile(rule)

   def updateUrl(self):
       self.url = self.serviceUrl % urllib.urlencode(self.params)

   def parse(self):
       self.log("SEParser",self.query)
       self.updateUrl()
       page = self.getPage()
       entries = self.searchRule.findall(page)
       return entries


class GoogleParser(SearchEngineParser):

   serviceUrl = "http://google.com/search?%s"
   searchRule = r"<a href=\"([^\"]+)\" class=l>"

   def __init__(self, query):
       self.setQuery(query)
       self.setServiceUrl(self.serviceUrl)
       self.setSearchRule(self.searchRule)

   def setQuery(self, query):
       self.addParam("q",query)
       self.query = query

   def setMaxResult(self, maxResult):
       self.addParam("num",maxResult)


fh = open(sys.argv[1])
for query in fh.readlines():
   parser = GoogleParser(query)
   parser.setMaxResult(100)
   urls = parser.parse()
   for url in urls:
       print url


Последний раз редактировалось: dadalov (28/06/07 в 09:44), всего редактировалось 1 раз
цитата
27/06/07 в 20:27
 ghood
Хороший пиар icon_smile.gif
респект
цитата
27/06/07 в 20:55
 xreload
и зачем оно нужно это дите мертворожденное ?
заголовок лучше сменить на Dead Python...
цитата
28/06/07 в 09:34
 dadalov


Видимо в образовательных целях.
цитата
28/06/07 в 10:01
 xreload
видимо комментарии хотя бы в код нужно уметь вставлять, а то так твое образование до одного места , тебе бы самому еще подучиться не мешало бы...
цитата
28/06/07 в 10:06
 dadalov


Я поглядел, ты тут на форуме неотличаешься особым спокойствием. Так что засунь себе свои комментарии в то самое место.

Последний раз редактировалось: dadalov (28/06/07 в 10:36), всего редактировалось 1 раз
цитата
28/06/07 в 10:32
 xreload
ухты какой грубый пионер , ты оказывается нетолько писать не умеешь, а еще и общаться...
цитата
29/06/07 в 00:07
 Hide-R
Бокс! icon_smile.gif

Последний раз редактировалось: Hide-R (29/06/07 в 12:30), всего редактировалось 1 раз
цитата
29/06/07 в 01:01
 xreload
ну блять да , sigwhore тут еще не отметились...
цитата
29/06/07 в 12:32
 Hide-R
xreload:
off
Так тебе спокойнее?
/off


Эта страница в полной версии