Python에 내장되어 있는 HTMLParser를 쓰다가 난관에 봉착했다.
완전한 HTML이 아니면 파싱에러가 속출하는거다…헉~~~
내부 코드를 보니 정규식으로 “<"를 테그 시작으로 보고 그때 이벤트를 발생해서 테그 속성을 가져오게 상속받아 임플리먼츠를 하는것이였다.
닫는 테그 없는건 예사… onclick=” ………….’ 이렇게 닫아줘서 에러…
그래서 에러처리 따로 해주고 했는데 … 그거 역시 미봉책에 불과했다.
Crawling 하다가 HTML코드에 별의별 코드가 다 존재하는걸 보고 웃기도 했지만 모질라나 IE 불여우같은 브라우저의 위대함을 새삼 깨달은 순간이이도 했다.
그렇게 찾다 찾다… Tidy라는 툴을 찾아냈고 완전한(?) HTML을 만들어 주는걸 보고 새삼놀랐다.
이게 Python 모듈이 없나 하고 찾을려고 구글신에게 문의해본 결과 mxTidy라는 모듈이 있었다.
이 모듈을 이용해 변환한 결과 아주 성공적으로 파싱이 되는것이였다.
간단하지만 리포팅 옵션까지 가지고 있어 앞으로 유용하게 쓰여질거 같다.
이런 유용한 모듈을 만들어주신 분들께 감사할따름이다..
저도 유용하게 쓰고 있는 툴입니다.
여러가지로 편하더군요..
Apple 님 : 이제는 신기하기도 해서 안을 헤집어 보고 싶은 욕구까지 오르네요.. ㅡㅡ;
오.. 이거 멋진걸~
pistos 님 : 멋진넘이야..ㅋㅋㅋ
이야.. 이런게 있었네요~ 잘보고 갑니다. ^^
저.. 실례합니다만.. tidy 사용하실때 한글이 깨지지 않던가요.
저는 C#으로 하고 있는데… HTML 내의 한글이 모두 깨져서 실행이 되더군요.
가야 님 : Tidy 실행하실때 인풋 인코딩과 아웃풋 인코딩을 직접 지정해 주시는게 좋을겁니다. 지정해주지 않으실경우 한글이 깨지는 경우가 있고 심지어는 메모리 관련 에러까지 나더군요.
답변 감사드립니다. 헌데.. 인코딩을 직접 지정해준다는건, Tidy에 따로 함수가 있는건가요? 아니면, 받은 문자열을 변환해주어야 하는건가요? tidy의 SetCharEncoding 함수를 써봤는데 잘 되지 않더군요.