В този урок ние възнамеряваме да направим. Ще разберем как могат да бъдат извлечени стойности на различни HTML тагове и също така да заменим функционалността по подразбиране на този модул, за да добавим някаква собствена логика. Ще направим това с помощта на HTMLParser клас в Python в html.парсер модул. Нека видим кода в действие.
Разглеждайки клас HTMLParser
За да анализираме HTML текста в Python, можем да се възползваме от HTMLParser клас в html.парсер модул. Нека да разгледаме дефиницията на клас за HTMLParser клас:
клас html.парсер.HTMLParser (*, convert_charrefs = Вярно)The convert_charrefs полето, ако е зададено на True, ще направи всички препратки към символи преобразувани в техните еквиваленти в Unicode. Само скрипт / стил елементи не се преобразуват. Сега ще се опитаме да разберем всяка функция за този клас, за да разберем по-добре какво прави всяка функция.
- handle_startendtag Това е първата функция, която се задейства, когато HTML низ се предава на екземпляра на класа. След като текстът достигне тук, контролата се предава на други функции в класа, която се стеснява до други тагове в String. Това е ясно и в дефиницията за тази функция: def handle_startendtag (self, tag, attrs):
себе си.handle_starttag (таг, attrs)
себе си.handle_endtag (таг) - handle_starttag: Този метод управлява началния маркер за данните, които получава. Дефиницията му е, както е показано по-долу: def handle_starttag (self, tag, attrs):
мине - handle_endtag: Този метод управлява крайния маркер за данните, които получава: def handle_endtag (self, tag):
мине - handle_charref: Този метод управлява препратките към знаци в данните, които получава. Дефиницията му е както е показано по-долу: def handle_charref (self, name):
мине - handle_entityref: Тази функция обработва препратките към обекта в HTML, предаден към нея: def handle_entityref (self, name):
мине - handle_data: Това е функцията, при която се извършва реална работа за извличане на стойности от HTML таговете и се предава данните, свързани с всеки етикет. Дефиницията му е както е показано по-долу: def handle_data (self, data):
мине - handle_comment: Използвайки тази функция, можем също така да получим коментари, прикачени към HTML източник: def handle_comment (self, data):
мине - handle_pi: Тъй като HTML може да има и инструкции за обработка, това е функцията, при която тези дефиниции са както е показано по-долу: def handle_pi (самостоятелно, данни):
мине - handle_decl: Този метод обработва декларациите в HTML, дефиницията му се предоставя като: def handle_decl (самостоятелно, decl):
мине
Подкласиране на клас 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 (' ')Ето какво получаваме обратно с това обаждане:
DOCTYPE низ
Нека сега опитаме с етикет на изображение и да видим какви данни той извлича:
парсер.feed ('')Ето какво получаваме обратно с това обаждане:
HTMLParser маркер на изображението
След това нека опитаме как скрипт тагът се държи с функциите на Python:
парсер.feed ('')парсер.feed ('')
парсер.feed ('# python цвят: зелен')
Ето какво получаваме обратно с това обаждане:
Маркер на скрипт в htmlparser
И накрая, предаваме коментари и в раздела HTMLParser:
парсер.feed ('''')
Ето какво получаваме обратно с това обаждане:
Анализиране на коментари
Заключение
В този урок разгледахме как можем да анализираме HTML с помощта на собствен клас на HTMLParser на Python без друга библиотека. Можем лесно да модифицираме кода, за да променим източника на HTML данните на HTTP клиент.
Прочетете повече публикации на базата на Python тук.