Найти - Пользователи
Полная версия: вопрос по HTMLParser
Начало » Python для новичков » вопрос по HTMLParser
1
lobster
Приветствую всех участников форума!
Использую модуль 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>, но мне нужно все без исключения.
neo08
Мне кажется этод код не имет нечего общего к извлечению <script>, <strong>, <i>. Он звлекет контент с <div> у которих есть атрибуты. Можете переформулировать вопрос?
lobster
Мне кажется этод код не имет нечего общего к извлечению <script>, <strong>, <i>. Он звлекет контент с <div> у которих есть атрибуты. Можете переформулировать вопрос?
Ну вообщем имеется html страница в ней есть тег <div id=“…”></div> мне нужно получить содержимое внутри этого тега вместе со всеми тегами <strong>, <i>, <script>, как я понял нужно добавлять перехватчики этих тегов в класс, искал эту заветную опцию которая включает то что мне нужно, но ничего подобного не нашел в документации, решил это регекспами.
py.user.next
приведи конкретный пример страницы
напиши, что конкретно нужно получить из неё

lobster
как я понял нужно добавлять перехватчики этих тегов в класс
это вряд ли - вложенные теги можно брать как простой текст
lobster
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 обработать нужно?
py.user.next
да, проверил, действительно, не выводит он теги как текст (перепутал его возможности с lxml.html)
lobster
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>")
Вот так будет лучше, но опять же выводятся все текстовые узлы кроме стронгов, выходит что теги самостоятельно выводить надо, еще я заметил что встречая теги вида <_гыргыргыр></_гыргыргыр> выдает исключение типа невалидный код.
py.user.next
lobster
Вот так будет лучше, но опять же выводятся все текстовые узлы кроме стронгов, выходит что теги самостоятельно выводить надо
не надо, всё равно там ещё атрибуты и пробелы
нужно заменить инструмент, потому что HTMLParser не может выводить теги, он может только обрабатывать их
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB