Форум сайта python.su
0
Приветствую всех участников форума!
Использую модуль 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
Офлайн
0
Мне кажется этод код не имет нечего общего к извлечению <script>, <strong>, <i>. Он звлекет контент с <div> у которих есть атрибуты. Можете переформулировать вопрос?
Офлайн
0
Мне кажется этод код не имет нечего общего к извлечению <script>, <strong>, <i>. Он звлекет контент с <div> у которих есть атрибуты. Можете переформулировать вопрос?Ну вообщем имеется html страница в ней есть тег <div id=“…”></div> мне нужно получить содержимое внутри этого тега вместе со всеми тегами <strong>, <i>, <script>, как я понял нужно добавлять перехватчики этих тегов в класс, искал эту заветную опцию которая включает то что мне нужно, но ничего подобного не нашел в документации, решил это регекспами.
Офлайн
857
приведи конкретный пример страницы
напиши, что конкретно нужно получить из неё
lobsterэто вряд ли - вложенные теги можно брать как простой текст
как я понял нужно добавлять перехватчики этих тегов в класс
Отредактировано py.user.next (Фев. 2, 2013 01:08:53)
Офлайн
0
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>")
Отредактировано lobster (Фев. 4, 2013 04:11:07)
Офлайн
857
да, проверил, действительно, не выводит он теги как текст (перепутал его возможности с lxml.html)
Офлайн
0
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>")
Офлайн
857
lobsterне надо, всё равно там ещё атрибуты и пробелы
Вот так будет лучше, но опять же выводятся все текстовые узлы кроме стронгов, выходит что теги самостоятельно выводить надо
Офлайн