Форум сайта python.su
Здравствуйте!
Проблема небольшая, помогите пожалуйста.
Имеем: питон 3 и граб 0.4.13
Пишем:
from grab import Grab g = Grab() g.go ('www.f1news.ru') print(g.doc.select('//title').text())
1 F1news.ru - 2014 1
Формула 1 на F1news.ru - новости чемпионата 2014 Формулы 1
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">
from grab import Grab g = Grab() g.setup(charset = 'windows-1251') g.go ('www.f1news.ru') print(g.doc.select('//title').text())
g.setup(charset = 'Windows-1251') g.setup(charset = 'WINDOWS-1251') g.setup(charset = 'windows - 1251') g.setup(charset = 'cp1251') g.setup(charset = 'CP1251')
Отредактировано Alex_HH (Ноя. 3, 2014 09:56:50)
Офлайн
Смотрим
сюда: https://github.com/lorien/grab/blob/master/grab/base.py#L235
сюда: https://github.com/lorien/grab/blob/master/grab/base.py#L587
и сюда: https://github.com/lorien/grab/blob/master/grab/document.py#L522
и, наверно, постим баг.
Офлайн
AleksRevo
Смотрим сюда: https://github.com/lorien/grab/blob/master/grab/base.py#L235сюда: https://github.com/lorien/grab/blob/master/grab/base.py#L587и сюда: https://github.com/lorien/grab/blob/master/grab/document.py#L522и, наверно, постим баг.
from grab import Grab g = Grab() # ===!!!! === g.setup(document_charset = 'windows-1251') # ===!!!! === g.go ('www.f1news.ru') print(g.doc.select('//title').text())
Отредактировано Alex_HH (Окт. 21, 2014 00:06:46)
Офлайн
Вообще, у меня оно отваливалось чуть раньше с вот таким вот сообщением:
>>> g.go ('www.f1news.ru') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 192: invalid continuation byte
>>> grab.__version__ '0.4.13'
Python 3.3.5 (default, Sep 30 2014, 02:25:20) [GCC 4.7.3] on linux
# Character set to which any unicode data should be encoded # before get placed in request # This setting is overwritten after each request with # charset of retrieved document charset='utf-8', # Charset to use for converting content of response # into unicode, by default it is detected automatically document_charset=None,
Отредактировано AleksRevo (Окт. 21, 2014 02:43:14)
Офлайн
Спасибо, с этим вроде понял.
Моя версия питона:
Python 3.2.3 (default, Feb 20 2013, 17:02:41)
[GCC 4.7.2] on linux2
class f1news (Spider): initial_urls = ['http://www.f1news.ru/'] base_url = 'http://www.f1news.ru/' def task_initial (self, grab, task): print ('Start') yestarday = grab.doc.select('//div[@id="lastNews"]/h3/span[@class="floatRight"]/a[2]/@href').text() # === !!!! === g = Grab() g.setup(document_charset = 'windows-1251', url = yestarday) yield (Task('title', grab = g)) # === !!!! ===
def prepare(self): """ You can do additional spider customizatin here before it has started working. Simply redefine this method in your Spider class. """
def setup_grab(self, **kwargs): self.grab_config.update(**kwargs)
class f1news (Spider): initial_urls = ['http://www.f1news.ru/'] base_url = 'http://www.f1news.ru/' # ==== !!!! ==== def prepare(self): self.setup_grab(document_charset = 'windows-1251') # ==== !!!! ==== def task_initial (self, grab, task): print ('Start') yestarday = grab.doc.select('//div[@id="lastNews"]/h3/span[@class="floatRight"]/a[2]/@href').text() yield (Task('title', url = yestarday))
Отредактировано Alex_HH (Окт. 21, 2014 11:06:21)
Офлайн
неграмотно написал… вместо “c Python-интерфейсом” - следует читать “(grab или что-то другое легко устанавливаемое под Python 2.7)”70-486 - исправляю…
Офлайн