С нами с 23.04.07
Сообщения: 8
Рейтинг: 6
|
Добавлено: 27/06/07 в 15:07 |
Привожу ниже пример парсера 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 раз
|
|
Софт на заказ - ICQ 390157542.
Качественно и быстро!
|
0
|
|
|
БешаныйСуслег
С нами с 16.06.04
Сообщения: 1322
Рейтинг: 1338
|
Добавлено: 27/06/07 в 20:27 |
Хороший пиар
респект
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 27/06/07 в 20:55 |
и зачем оно нужно это дите мертворожденное ?
заголовок лучше сменить на Dead Python...
|
|
|
|
С нами с 23.04.07
Сообщения: 8
Рейтинг: 6
|
Добавлено: 28/06/07 в 09:34 |
Видимо в образовательных целях.
|
|
Софт на заказ - ICQ 390157542.
Качественно и быстро!
|
0
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 28/06/07 в 10:01 |
видимо комментарии хотя бы в код нужно уметь вставлять, а то так твое образование до одного места , тебе бы самому еще подучиться не мешало бы...
|
|
|
|
С нами с 23.04.07
Сообщения: 8
Рейтинг: 6
|
Добавлено: 28/06/07 в 10:06 |
Я поглядел, ты тут на форуме неотличаешься особым спокойствием. Так что засунь себе свои комментарии в то самое место.
Последний раз редактировалось: dadalov (28/06/07 в 10:36), всего редактировалось 1 раз
|
|
Софт на заказ - ICQ 390157542.
Качественно и быстро!
|
0
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 28/06/07 в 10:32 |
ухты какой грубый пионер , ты оказывается нетолько писать не умеешь, а еще и общаться...
|
|
|
|
С нами с 19.12.06
Сообщения: 528
Рейтинг: 511
|
Добавлено: 29/06/07 в 00:07 |
Бокс! ![icon_smile.gif](/template/images/smiles/icon_smile.gif)
Последний раз редактировалось: Hide-R (29/06/07 в 12:30), всего редактировалось 1 раз
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 29/06/07 в 01:01 |
ну блять да , sigwhore тут еще не отметились...
|
|
|
|
С нами с 19.12.06
Сообщения: 528
Рейтинг: 511
|
Добавлено: 29/06/07 в 12:32 |
xreload:
off
Так тебе спокойнее?
/off
|
|
|
|