У овој лекцији то је оно што намеравамо да урадимо. Открићемо како се вредности различитих ХТМЛ тагова могу издвојити и такође заменити подразумевану функционалност овог модула да бисмо додали неку своју логику. То ћемо урадити помоћу ХТМЛПарсер класе у Питхон-у у хтмл.парсер модул. Да видимо код на делу.
Гледајући класу ХТМЛПарсер
Да бисмо рашчланили ХТМЛ текст у Питхону, можемо користити ХТМЛПарсер разред у хтмл.парсер модул. Погледајмо дефиницију класе за ХТМЛПарсер класа:
класе хтмл.парсер.ХТМЛПарсер (*, цонверт_цхаррефс = Тачно)Тхе цонверт_цхаррефс поље, ако је постављено на Тачно, претвориће све референце на знакове у њихове еквиваленте у Уницодеу. Само скрипта / стил елементи се не претварају. Сада ћемо покушати да разумемо сваку функцију за ову класу како бисмо боље разумели шта свака функција ради.
- хандле_стартендтаг Ово је прва функција која се покреће када се ХТМЛ низ проследи инстанци класе. Једном када текст стигне овде, контрола се преноси на друге функције у класи која се сужава на друге ознаке у низу. То је такође јасно у дефиницији ове функције: деф хандле_стартендтаг (селф, таг, аттрс):
себе.хандле_старттаг (таг, аттрс)
себе.хандле_ендтаг (таг) - хандле_старттаг: Овај метод управља стартном ознаком за податке које прима. Његова дефиниција је приказана доле: деф хандле_старттаг (селф, таг, аттрс):
проћи - хандле_ендтаг: Ова метода управља крајњом ознаком за податке које прима: деф хандле_ендтаг (селф, таг):
проћи - хандле_цхарреф: Овај метод управља референцама знакова у подацима које прима. Његова дефиниција је приказана доле: деф хандле_цхарреф (селф, наме):
проћи - хандле_ентитиреф: Ова функција рукује референцама ентитета у ХТМЛ-у који јој је прослеђен: деф хандле_ентитиреф (селф, наме):
проћи - хандле_дата: Ово је функција у којој се обавља стварни рад на издвајању вредности из ХТМЛ ознака и прослеђују се подаци који се односе на сваку ознаку. Његова дефиниција је приказана доле: деф хандле_дата (селф, дата):
проћи - хандле_цоммент: Коришћењем ове функције такође можемо добити коментаре у прилогу ХТМЛ извора: деф хандле_цоммент (селф, дата):
проћи - хандле_пи: Како ХТМЛ такође може имати упутства за обраду, ово је функција код које је његова дефиниција приказана доле: деф хандле_пи (селф, дата):
проћи - хандле_децл: Овај метод обрађује декларације у ХТМЛ-у, његова дефиниција је дата као: деф хандле_децл (селф, децл):
проћи
Подкласирање класе ХТМЛПарсер
У овом одељку подкласираћемо класу ХТМЛПарсер и погледаћемо неке функције које се позивају када се ХТМЛ подаци проследе инстанци класе. Напишимо једноставну скрипту која ради све ово:
фром хтмл.парсер импорт ХТМЛПарсеркласа ЛинукХТМЛПарсер (ХТМЛПарсер):
деф хандле_старттаг (селф, таг, аттрс):
принт ("Пронађена је почетна ознака:", ознака)
деф хандле_ендтаг (селф, таг):
принт ("Наишла је крајња ознака:", ознака)
деф хандле_дата (селф, дата):
принт ("Подаци пронађени:", подаци)
парсер = ЛинукХТМЛПарсер ()
парсер.напајање("
'
Питхон ХТМЛ модул за рашчлањивање
')
Ево шта добијамо овом командом:
Питхон ХТМЛПарсер поткласа
ХТМЛПарсер функције
У овом одељку ћемо радити са различитим функцијама класе ХТМЛПарсер и размотрити функционалност сваке од њих:
фром хтмл.парсер импорт ХТМЛПарсерфром хтмл.ентитети увозе наме2цодепоинт
класа ЛинукХинт_Парсе (ХТМЛПарсер):
деф хандле_старттаг (селф, таг, аттрс):
принт ("Старт таг:", ознака)
за аттр у аттрс:
испис ("аттр:", аттр)
деф хандле_ендтаг (селф, таг):
принт ("Енд таг:", таг)
деф хандле_дата (селф, дата):
принт ("Подаци:", подаци)
деф хандле_цоммент (селф, дата):
испис ("Коментар:", подаци)
деф хандле_ентитиреф (селф, име):
ц = цхр (наме2цодепоинт [име])
принт ("Именовани ент:", ц)
деф хандле_цхарреф (селф, име):
ако име.стартвитх ('к'):
ц = цхр (инт (име [1:], 16))
иначе:
ц = цхр (инт (име))
принт ("Нум ент:", ц)
деф хандле_децл (селф, подаци):
испис ("Децл:", подаци)
парсер = ЛинукХинт_Парсе ()
Уз разне позиве, дозволимо да овој инстанци доставимо одвојене ХТМЛ податке и да видимо какав излаз ови позиви генеришу. Започећемо са једноставним ДОКТИП низ:
парсер.напајање(' ')Ево шта добијамо овим позивом:
ДОЦТИПЕ стринг
Покушајмо сада са сликовном ознаком и погледајте које податке она издваја:
парсер.напајање('')Ево шта добијамо овим позивом:
Ознака слике ХТМЛПарсер
Затим, хајде да покушамо како се таг скрипте понаша са Питхон функцијама:
парсер.напајање('')парсер.напајање('')
парсер.феед ('# питхон цолор: греен')
Ево шта добијамо овим позивом:
Ознака скрипте у хтмлпарсер-у
На крају, коментаре преносимо и у одељак ХТМЛПарсер:
парсер.напајање('''')
Ево шта добијамо овим позивом:
Рашчлањивање коментара
Закључак
У овој лекцији смо погледали како можемо да рашчланимо ХТМЛ помоћу Питхон-ове властите класе ХТМЛПарсер без икакве друге библиотеке. Код можемо лако изменити да бисмо извор ХТМЛ података променили у ХТТП клијент.
Прочитајте више постова заснованих на Питхону овде.