2007년 7월 11일 수요일

[메모] 루비로 특정사이트를 스크랩하기에 대한 생각?

친구인 H군(사이트 운영자입니다.)이 '스팸 때문에 골치아퍼~'라고 투덜투덜 되길래 루비로 스크래퍼(?)를 만들면 어떨까 하고 고민을 하다가 조사를 좀 해봤습니다. 

기본적인 아이디어는 다음과 같습니다.
  1. 사이트의 주소를 인자로 받습니다.
  2. 사이트의 html을 읽어옵니다.
  3. html에서 http://로 시작되는 주소를 추출합니다.
  4. 해당 주소가 스팸주소인지를 비교합니다.
    1. 스팸주소인 경우 해당주소를 삭제 대상으로 기억해 놓습니다.
    2. 해당 주소가 운영 사이트의 하위 사이트면 해당 주소로 이동 후 3,4의 과정을 반복합니다.
아주~ 단순한 프로그램이라서 금방되겠지 생각을 했답니다만.. 쉽지가 않더군요. (세상일이 만만하겠습니까?)

1생략하고 2의 부분은 Net::HTTP.start(url) {|http| response=http.get('index.html')} 을 사용하여 페이지를 요청한 다음의 response를 얻어냅니다. 그리고, response.body를 통해서 페이지의 각 라인을 얻어옵니다.

여기에서 정규표현식을 써서 http://로 된 주소를 얻어옵니다. 이 주소를 이용해서 다시 탐색에 들어가거나 스팸여부를 비교하기 위한 수단으로 사용합니다.

주소를 얻는 부분은 쉽긴한데 html을 파싱해서 어떤 데이타를 얻어야할지 필요한데이타를 어떻게 가져와야할 지가 애매하더군요. 공식적인 html 파서는 없는 듯 했습니다. (검색 결과 몇개 나오는 것은 있더군요. RAA-html-parser2, JavaScript파서도 있더군요.)

결론은... 여기까지.. 역시 같이 뭔가를 같이할 사람이 필요한 시점인 것 같군요 ^^

관련자료

댓글 2개:

  1. 크롤링의 기본 중에 기본.. 이군요..

    답글삭제
  2. @지민아빠 - 2007/07/12 00:37
    그래서 제목이 [메모]입니다. ^^;;;;;;;

    답글삭제