약 한달 조금 넘게 웹 로봇하고 UrlServer를 개발해서 수많은 사이트를 크롤링 했다.
수많은 에러에 봉착하고 수정하고를 개발하고 나서 한 보름정도를 버그 잡는데 보넸다..
아니….
프로그램의 버그라기보다는 엉터리 html코드와 header 때문이다…..
마이크로 소프트 익스플로러나 파이어 폭스처럼 유연하게 모든 엉터리 컨텐츠에 대해서 정보를 가질수 있게하려고 코드 수정에 수정을 가하고 있다.
아마도 언젠가…….. 그때가 언제인지는 모르겠지만… 업계 비표준(마소 브라우저)이 보여주는것만큼 정보를 가져올수 있는 능력을 웹 로봇이 배양한다면 완성되었다고 할수있겠다. (단…. 자바스크립 링크와 플래쉬 링크는 제외하고)
가장황당했던 에러
html 헤더에 이게 붙어 왔다.
웹 로봇 에러 로그를 보니….. 2799를 int 형으로 변환이 안된다고 나와있넹…
2799 변환되는데… int형 범위안이고 …..
그래서 다시 자세히 봤다..
그런데.. 뒤에 “;”가 붙어 있는것이다…헉~~~~
황당하군… 그래서 exception처리를 따라가 보다가.. 파이썬에서 기본적으로 제공하는 라이브러리인 urllib.py 소스 코드를 고쳐서 해결했다.
사실 urllib소스를 고친게 처음이 아니다… HTMLParser.py는 거의 30%이상을 고쳐서 현재 웹로봇의 중심 파서로 사용하고 있다.(바로 어제도 몇라인 고치고 추가했다…)
오류 HTML에 대해서는 Tidy를 써서 보정을 해서 웹로봇을 돌렸는데.. 자꾸 메모리 참조에러나서 HTMLParser를 유연하게 프로그래밍해 Tidy를 안쓰는 방향으로 가고 있다.(바람직한 방향인거 같다)
다른 한가지 문제는 다양한 웹페이지 인코딩이다.
생각보다 많은 한국어 인코딩 alias가 존재하더라…
내가 알고있는것만 위와같다…
인코딩 문제도 앞으로 외국어 사이트 파싱할거 대비해서 필요할거 같은데 국내 사이트만 해도 할게 많다… 참 utf-8도 있구나…유니코드….쩝…
파일 다운 로드 문제도 그렇다… 다양한 방식이 있더군…
1. 일반적인 직접링크
2. 서버사이드 스크립에의한 stream 다운로딩..
3. 위 둘도 아니지만.. url 타입은 2번과 같은거..
내가 아는건 위 3가지이다..
하지만 다른 어떤 다운로딩 방식이 나올지 모른다… ㅡㅡ;
다운로딩 하는것만이 문제가 아니다… 파일명을 뽑아오는것도 문제긴하다.
지금 현재로서는 3가지 방법과 병행해 각각다른 파일명 추출법을 쓴다.
그 설명은 복잡하니… 여기서 하긴 좀 그렇다…ㅋㅋ
어떻게 브라우저는 html코드오류라든지 헤더오류에 대해서 유연하게 판단해 줄까???
웹 로봇을 만들면서 느낀거지만..
정말 진심으로 느꼈다..
“브라우저 만드시는 분들 정말 대단하시다는걸…”
브라우저 만드시는 분 대단하십니다.. by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.