Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 27, 2013 17:38:39

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

Приветствую всех участников форума!
Использую модуль HTMLParser для парсинга страниц сайта, код класса:

from HTMLParser import HTMLParser
class parser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.content = ""
self.div = False

def handle_starttag(self, tag, attrs):
if tag == "div" and attrs:
self.div = True

def handle_data(self, data):
if div == True:
self.content = data
self.div = False
В этом случае данные извлекаются до встреченных тегов <script>, <strong>, <i>, но мне нужно все без исключения.



Офлайн

#2 Янв. 30, 2013 11:16:42

neo08
От:
Зарегистрирован: 2008-08-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

Мне кажется этод код не имет нечего общего к извлечению <script>, <strong>, <i>. Он звлекет контент с <div> у которих есть атрибуты. Можете переформулировать вопрос?



Офлайн

#3 Фев. 1, 2013 17:01:38

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

Мне кажется этод код не имет нечего общего к извлечению <script>, <strong>, <i>. Он звлекет контент с <div> у которих есть атрибуты. Можете переформулировать вопрос?
Ну вообщем имеется html страница в ней есть тег <div id=“…”></div> мне нужно получить содержимое внутри этого тега вместе со всеми тегами <strong>, <i>, <script>, как я понял нужно добавлять перехватчики этих тегов в класс, искал эту заветную опцию которая включает то что мне нужно, но ничего подобного не нашел в документации, решил это регекспами.



Офлайн

#4 Фев. 2, 2013 01:07:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

приведи конкретный пример страницы
напиши, что конкретно нужно получить из неё

lobster
как я понял нужно добавлять перехватчики этих тегов в класс
это вряд ли - вложенные теги можно брать как простой текст



Отредактировано py.user.next (Фев. 2, 2013 01:08:53)

Офлайн

#5 Фев. 4, 2013 04:02:17

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

py.user.next
Ну вот к примеру:

from HTMLParser import HTMLParser

class parser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.div = False

def handle_starttag(self, tag, attrs):
if tag == "div":
self.div = True

def handle_data(self, data):
if self.div == True:
print data
self.div = False

pars = parser()
pars.feed("<html>\
<body>\
<div>hello<strong>world</strong>hell</div>\
</body>\
</html>")
Здесь берется только hello минуя все остальное, хотя может быть корректно handle_endtag обработать нужно?



Отредактировано lobster (Фев. 4, 2013 04:11:07)

Офлайн

#6 Фев. 4, 2013 08:31:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

да, проверил, действительно, не выводит он теги как текст (перепутал его возможности с lxml.html)



Офлайн

#7 Фев. 4, 2013 13:23:06

lobster
От:
Зарегистрирован: 2011-06-09
Сообщения: 82
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

from HTMLParser import HTMLParser

class parser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.div = False

def handle_starttag(self, tag, attrs):
if tag == "div":
self.div = True

def handle_data(self, data):
if self.div == True:
print data

def handle_endtag(self, tag):
if self.div == True and tag == "div":
self.div = False

pars = parser()
pars.feed("<html>\
<body>\
<div>hello<strong>world</strong>hell</div>\
</body>\
</html>")
Вот так будет лучше, но опять же выводятся все текстовые узлы кроме стронгов, выходит что теги самостоятельно выводить надо, еще я заметил что встречая теги вида <_гыргыргыр></_гыргыргыр> выдает исключение типа невалидный код.



Офлайн

#8 Фев. 4, 2013 23:50:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

вопрос по HTMLParser

lobster
Вот так будет лучше, но опять же выводятся все текстовые узлы кроме стронгов, выходит что теги самостоятельно выводить надо
не надо, всё равно там ещё атрибуты и пробелы
нужно заменить инструмент, потому что HTMLParser не может выводить теги, он может только обрабатывать их



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version