Python

Разбор на HTML с помощта на Python

Разбор на HTML с помощта на Python
Синтактичният анализ на HTML е една от най-често срещаните задачи, които се правят днес за събиране на информация от уебсайтовете и за нейното копаене за различни цели, като например да се установи ценова ефективност на даден продукт с течение на времето, отзиви за книга на уебсайт и много други. Има много библиотеки като BeautifulSoup в Python, които абстрахират толкова много болезнени точки при синтактичния анализ на HTML, но си струва да се знае как тези библиотеки всъщност работят под този слой на абстракция.

В този урок ние възнамеряваме да направим. Ще разберем как могат да бъдат извлечени стойности на различни HTML тагове и също така да заменим функционалността по подразбиране на този модул, за да добавим някаква собствена логика. Ще направим това с помощта на HTMLParser клас в Python в html.парсер модул. Нека видим кода в действие.

Разглеждайки клас HTMLParser

За да анализираме HTML текста в Python, можем да се възползваме от HTMLParser клас в html.парсер модул. Нека да разгледаме дефиницията на клас за HTMLParser клас:

клас html.парсер.HTMLParser (*, convert_charrefs = Вярно)

The convert_charrefs полето, ако е зададено на True, ще направи всички препратки към символи преобразувани в техните еквиваленти в Unicode. Само скрипт / стил елементи не се преобразуват. Сега ще се опитаме да разберем всяка функция за този клас, за да разберем по-добре какво прави всяка функция.

Подкласиране на клас HTMLParser

В този раздел ще подкласираме класа HTMLParser и ще разгледаме някои от функциите, които се извикват, когато HTML данните се предават на екземпляра на класа. Нека напишем прост скрипт, който прави всичко това:

от html.импортиране на синтактичен анализатор
клас LinuxHTMLParser (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Срещнат начален маркер:", маркер)
def handle_endtag (self, tag):
print ("Срещнат краен маркер:", маркер)
def handle_data (самостоятелно, данни):
print ("Намерени данни:", данни)
парсер = LinuxHTMLParser ()
парсер.емисия ("
'

Модул за синтактичен анализ на Python HTML


')

Ето какво получаваме обратно с тази команда:

Подклас на Python HTMLParser

Функции на HTMLParser

В този раздел ще работим с различни функции от класа HTMLParser и ще разгледаме функционалността на всяка от тях:

от html.импортиране на синтактичен анализатор
от html.обекти импортиране name2codepoint
клас LinuxHint_Parse (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Start tag:", tag)
за attr в attrs:
print ("attr:", attr)
def handle_endtag (self, tag):
print ("Краен маркер:", маркер)
def handle_data (самостоятелно, данни):
print ("Данни:", данни)
def handle_comment (self, data):
print ("Коментар:", данни)
def handle_entityref (самостоятелно, име):
c = chr (name2codepoint [име])
print ("Наименуван ent:", c)
def handle_charref (самостоятелно, име):
ако име.startwith ('x'):
c = chr (int (име [1:], 16))
друго:
c = chr (int (име))
print ("Num ent:", c)
def handle_decl (самостоятелно, данни):
печат ("Decl:", данни)
парсер = LinuxHint_Parse ()

С различни повиквания, нека подадем отделни HTML данни към този екземпляр и да видим какъв изход генерират тези повиквания. Ще започнем с просто ДОКТИП низ:

парсер.feed (''"http: // www.w3.org / TR / html4 / стриктно.dtd "> ')

Ето какво получаваме обратно с това обаждане:

DOCTYPE низ

Нека сега опитаме с етикет на изображение и да видим какви данни той извлича:

парсер.feed ('Логото на Python')

Ето какво получаваме обратно с това обаждане:

HTMLParser маркер на изображението

След това нека опитаме как скрипт тагът се държи с функциите на Python:

парсер.feed ('')
парсер.feed ('')
парсер.feed ('# python цвят: зелен')

Ето какво получаваме обратно с това обаждане:

Маркер на скрипт в htmlparser

И накрая, предаваме коментари и в раздела HTMLParser:

парсер.feed (''
'')

Ето какво получаваме обратно с това обаждане:

Анализиране на коментари

Заключение

В този урок разгледахме как можем да анализираме HTML с помощта на собствен клас на HTMLParser на Python без друга библиотека. Можем лесно да модифицираме кода, за да променим източника на HTML данните на HTTP клиент.

Прочетете повече публикации на базата на Python тук.

Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...
Как да разработите игра на Linux
Преди десетилетие не много потребители на Linux биха прогнозирали, че любимата им операционна система един ден ще бъде популярна игрална платформа за ...
Пристанища с отворен код на търговски игрални машини
Безплатни разширения на играта с отворен код и междуплатформени игри могат да се използват за възпроизвеждане на стари, както и някои от доста скорошн...