Python에는 html.parser 모듈의 HTMLParser 클래스를 통해 HTML 파일을 처리하는 기능이 있습니다. HTML 태그의 위치와 태그의 다른 많은 속성을 감지할 수 있습니다. HTML 파일에 있는 데이터를 식별하고 가져올 수도 있는 기능이 있습니다.
아래 예제에서 HTMLParser 클래스를 사용하여 클래스에서 정의한 태그와 데이터만 처리할 수 있는 사용자 정의 파서 클래스를 만드는 방법을 봅니다. 여기에서 시작 태그, 종료 태그 및 데이터를 처리하고 있습니다.
다음은 파이썬 사용자 정의 파서에서 처리되는 html입니다.
예시
<html> <br> <head> <br> <title>welcome to Tutorials Point!</title> <br> </head> <br> <body> <br> <h1>Learn anything !</h1> <br> </body> <br> </html>
아래는 위의 파일을 파싱한 후 커스텀 파서에 따라 결과를 출력하는 프로그램입니다.
예시
from html.parser import HTMLParser import io class Custom_Parser(HTMLParser): def handle_starttag(self, tag, attrs): print("Line and Offset ==", HTMLParser.getpos(self)) print("Encountered a start tag:", tag) def handle_endtag(self, tag): print("Line and Offset ==", HTMLParser.getpos(self)) print("Encountered an end tag :", tag) def handle_data(self, data): print("Line and Offset ==", HTMLParser.getpos(self)) print("Encountered some data :", data) parser = Custom_Parser() stream = io.open("E:\\test.html", "r") parser.feed(stream.read())
출력
위의 코드를 실행하면 다음과 같은 결과가 나옵니다. -
Line and Offset == (1, 0) Encountered a start tag: html Line and Offset == (1, 6) Encountered some data : Line and Offset == (2, 0) Encountered a start tag: head Line and Offset == (2, 6) Encountered some data : Line and Offset == (3, 0) Encountered a start tag: title Line and Offset == (3, 7) Encountered some data : welcome to Tutorials Point! Line and Offset == (3, 34) Encountered an end tag : title Line and Offset == (3, 42) Encountered some data : Line and Offset == (4, 0) Encountered an end tag : head Line and Offset == (4, 7) Encountered some data : Line and Offset == (5, 0) Encountered a start tag: body Line and Offset == (5, 6) Encountered some data : Line and Offset == (6, 0) Encountered a start tag: h1 Line and Offset == (6, 4) Encountered some data : Learn anything ! Line and Offset == (6, 20) Encountered an end tag : h1 Line and Offset == (6, 25) Encountered some data : Line and Offset == (7, 0) Encountered an end tag : body Line and Offset == (7, 7) Encountered some data : Line and Offset == (8, 0) Encountered an end tag : html