Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 18, 2007 15:32:32

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Нигде не могу найти хоть самого простого примера работы с модулем HTMLParser. Задача проста: найти в HTML-коде все теги div, у которых атрибут class равен ‘error’, и вывести их текст.

import HTMLParser
p = HTMLParser.HTMLParser()
p.feed(htmlText)
p.handle_starttag('div', ['class', 'error'])
Что надо делать дальше?



Офлайн

#2 Ноя. 18, 2007 17:45:58

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Все ники заняты
А стандартную документацию читал? Там же пример есть. Надо отнаследоваться от HTMLParser, и реализовать самому handle_starttag. В нем проверять tag на “div” и нужный тебе атрибут.



Офлайн

#3 Ноя. 18, 2007 18:55:34

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Там пример из нескольких строк, который вообще ничего не проясняет.
Я решил проблему с помощью красивого супа.
P.S. Вручную вставлять теги на форуме - это специально, из соображений мазохизма сделано? Ведь оригинальный движок PunBB содержит кнопки для вставки тегов.



Офлайн

#4 Ноя. 18, 2007 19:04:16

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Давай-те я лучше расскажу как это делать с моделем BeautifulSoup. Он удобнее и может работать с реальными (и битыми ) html, а не иделаьнымии конями в вакууме.

и так:
————————–
from BeautifulSoup import BeautifulSoup #подключаем суп =)
soup = BeautifulSoup(htmlText) #загружаем html в суп =)
divs = soup.findAll(name = ‘div’, attrs = {'class':'error'}) #ищем дивы
for div in divs:
print “”.join(div.findAll(text = True)) #выводим весь текст из divа
————————–



Офлайн

#5 Ноя. 18, 2007 19:04:45

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Все ники заняты
Там пример из нескольких строк, который вообще ничего не проясняет.
кому надо, тот поймет. плюс в референсе написано как пользоваться.



Офлайн

#6 Ноя. 19, 2007 14:17:07

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Все ники заняты


from HTMLParser import HTMLParser
class myparser(HTMLParser):

def __init__(self):
HTMLParser.__init__(self)
self.count = 0


def handle_starttag(self, tag ,attrs):
if tag == “div” and “error” in attrs:
print attrs
self.count = self.count+1
data = “”“
<div class=”error“>123</div>
<div class=”error“>123</div>
<div class=”error“>123</div>
<div class=”noerror“>123</div>
”“”
pars = myparser()
pars.feed(data)
print pars.count

Офлайн

#7 Ноя. 19, 2007 18:36:42

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Кстати, перед тем как заюзать HTMLParser рекомендую прогнать текст через суп

soup = BeautifulSoup(text)
soup.prettify()

Зы, в книге Россума которая на русском есть описание HTMLParser. Оно немного устарело, но суть понять будет легко,там всё достаточно просто. (Книгу вроде выкладывали на форуме.)



Офлайн

#8 Ноя. 19, 2007 20:33:54

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Спасибо за ответы!

Psixo
Кстати, перед тем как заюзать HTMLParser рекомендую прогнать текст через суп
Я так понял для себя, что реализовывать свой класс через HTMLParser просто ни к чему, если есть суп :). Тем более, если “перед тем как заюзать HTMLParser рекомендую прогнать текст”, т.е. без супа всё равно ни куда, получается.



Офлайн

#9 Ноя. 19, 2007 21:56:03

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

суп рулит однозначно конечно.
Но не всегда может корректно исправить совсем уж корявые html ( в одном случае из 200 наверное).
Наиболее похоже на то, как это делаем броузер - работает mxTidy.
http://www.egenix.com/products/python/mxExperimental/mxTidy/



Офлайн

#10 Ноя. 21, 2007 16:42:50

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг HTML, хоть какой-нибудь пример?

Все ники заняты, в принципе так и есть =) Хотя меня можете считать извращенцем, но суп я юзаю только чтобы выровнять хтмл. Остальное делаю через HTMLParser



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version