Форум сайта python.su
Есть код для получения содержимого веб страницы с помощью библиотеки grablib (Python 2.7 win)
from grab import Grab g = Grab() g.go('http://www.apteka.ua/article/145799?print=1')
g.search(u"843")
g.search(u"apteka")
g.search(u"здоровья")
Отредактировано agryn (Июнь 3, 2012 22:26:55)
Офлайн
Задача несколько нетипичная для парсинга. Обычно нужен конкретный элемент(ы) DOM-дерева.
Способ в лоб -
from grab import Grab g = Grab() g.go('http://www.apteka.ua/article/145799?print=1') s = g.response.body #тело ответа lst = s.split() word = "аптек" for i in xrange(0,len(lst)): if lst[i].find(word) != -1: print "Search success! word - %s Index - %s"%(lst[i],i)
Офлайн
agryn, а что конкретно ты хочешь сделать?
>>> g.search(u'здоровья') True
search(self, anchor, byte=False) method of grab.base.Grab instanceЧто за лисопед? Почему бы не определять тип body по типу anchor?
Search the substring in response body.
:param anchor: string to search
:param byte: if False then `anchor` should be the
unicode string, and search will be performed in `response.unicode_body()`
else `anchor` should be the byte-string and
search will be performed in `resonse.body`
If substring is found return True else False.
hedintОно будет работать, если файл исходника будет в кодировке страницы. Поменяешь ее - все отвалится. Тогда уже так
word = “аптек”
word = u"аптек".decode('cp1251')
Офлайн
> Что за лисопед? Почему бы не определять тип body по типу anchor?
Я стараюсь использовать миним магии. Мне важно знать, что пользователь Grab понимает, что он ищет. Если начать пытаться угадывать, что хочет пользователь, то придём к тому, что часть пользователей просто не будет понимать, что они делают, но не будут этого знать т.к. до поры до времени библиотека угадывала их желание. Вот, например, человек выше пишет
> так как думал что как раз проблем с кодировкой поменьше будет
Т.е. он просто хочет, чтобы проблем было меньше, не вникая в подробности. А когда проблемы всё же возникают, он не лезет в код, посмотреть как всё устроено, а просто удивляется, почему магия не сработала :)
Кстати, u“здоровья” у меня тоже находится без проблем.
> word = u“аптек”.decode('cp1251')
Что-то вы тут странное написали, если даже не вдаваться в вопрос, почему именно cp1251, то у unicode-строки вы можете вызвать encode, а не decode метод, ну или же префикс u там лишний.
Офлайн
Попробуйте так:
if g.response.body.find(u'WORD')>0:
blablablaGjg
Офлайн
В response.body содержатся байтовые, а не уникодовые данные. А ещё при использовании find метода, надо сравнивать с -1, а не нулём.
Офлайн
lorienДа, надо encode. Ну а почему 1251 - догадайся сам.
> word = u“аптек”.decode('cp1251')
Что-то вы тут странное написали, если даже не вдаваться в вопрос, почему именно cp1251, то у unicode-строки вы можете вызвать encode, а не decode метод, ну или же префикс u там лишний.
Офлайн