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 раз
xreload
видимо комментарии хотя бы в код нужно уметь вставлять, а то так твое образование до одного места , тебе бы самому еще подучиться не мешало бы...