Написал небольшой парсер XML.Yandex. Код ниже.
В конце кода есть 2 модуля, parse и parse 2, которые разбирают массив урлов из xml выдачи и возвращают позицию и урл для сайта. Оба работают.
Как вы думаете, какой из них лучше работает? и какие еще могут быть варианты парсера с целью получения урла и позиции
python 3.3
Заранее спасибо!
#--*-- coding: utf-8 --*-- import urllib.request from xml.dom.minidom import parseString class ya_search: def __init__(self,query,region='213',page='100'): self.query=query self.region=region self.page=page ya_user='kashkovsky' ya_key='03.46585082:f5a6271f3c5d9bad3ab17adcd1ff3f06' def yandex_key(self): return ('http://xmlsearch.yandex.ru/xmlsearch?user='+self.ya_user+'&key='+self.ya_key+'&lr=') def xml_build(self): defaults_xml='''<?xml version="1.0" encoding="UTF-8"?> <request> <query>%s</query> <groupings> <groupby attr="d" mode="deep" groups-on-page="%s" docs-in-group="1" /> </groupings> </request>''' return (defaults_xml % (self.query,self.page)).encode() def response(self): ya_url=self.yandex_key()+self.region return (urllib.request.urlopen(ya_url,self.xml_build())).read().decode() def urls(self): urls_xml=[] dom_xml=parseString(self.response()).getElementsByTagName('url') for node in dom_xml: urls_xml.append(node.childNodes[0].nodeValue.lower()) return urls_xml def parse(self,url): i=0 xml_urls=self.urls() while i<len(xml_urls): if url in xml_urls[i]: break i += 1 if i+1<len(xml_urls): return i+1,xml_urls[i] else: return 'Нет в топ 100' def parse2(self,url): xml_urls=self.urls() results=[x for x in xml_urls if url in x ] try: return (xml_urls.index(results[0])+1,results[0]) except: return 'Нет в топ 100'
