ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTML 오픈소스 parser - TFHppe
    프로그래밍/아이폰 2011. 4. 4. 01:05
    HTML parsing with iOS / OSX
     
    가끔씩 이지만, HTMl파싱이 필요할때가 있습니다.

    정규식을 이용하시거나, 직접 노드를 순회해서 파싱을 해도 좋지만
    쓰라고 만들어 주신 클래스가 이미 있고,
    그게 또 썩 괜찮게 작동해 주고 있으니 사용하는 미덕을 가져봅시다.


     단, 조건이 있습니다.
     -  html 스크립트가 규정대로 작성되어 있을것.
     -  세션/쿠키는 알아서 잘 처리할것.

     -  xPath에 대해 대충은 찾아볼것.


    제멋대로 작성된 html 이라면 직접 파싱하시는것 외에는 방법이 없습니다.
    정상적인 html일지라도, 
    가능하면, 웹개발자에게 연동가능한 api 를 만들어 주십사 요청하십시오.

    html 파싱으로 작동하는 앱은 언제 폭파될지 잡스아저씨도 모릅니다.

    간략히 -
    1. 프로젝트 설정의 'Header search Paths' 에 
        ${SDKROOT}/usr/include/libxml2 를 추가하고 Recursive에 체크합니다.

    2. 프로젝트 설정의 'Other Linker Flags'에
    -lxml2 를 추가합니다.

    3. git://github.com/topfunky/hpple.git를 클론합니다.
    (git 사용법을 잘 모르겠다 싶으신 분은 http://
    github.com/topfunky/hpple로
    가셔서 그냥 다운로드 하셔도 됩니다)

    4. 아래 클래스들을 프로젝트로 복사합니다.


    TFHpple.h
    TFHpple.m
    TFHppleElement.h
    TFHppleElement.m
    XPathQuery.h
    XPathQuery.m

     

    사용 합니다. The end. ...


    라고 하면 좀 서운하실까봐

    #import "TFHpple.h"

    ...

    NSURL *dataURL = [NSURL URLWithString:@"
    http://www.yourDomain.com"];
    NSString *htmlString = [[NSString stringWithContentsOfURL:dataURL 
     
    encoding:YOUR_SITE_ENCODING error:nil]
                           stringByReplacingOccurrencesOfString:@"<br>" withString", "];

    NSData *data = [htmlString dataUsingEncoding:NSUnicodeStringEncoding];

    TFHpple *htmlParser = [[TFHpple alloc] initWithHTMLData:data];
                         

    NSArray *elements = [htmlParser search:"xPath node"];

    TFHppleElement *element = [elements objectAtIndex:
    0];
     
    ...


    빨간 볼드의 자리는 사용하시는대로 바꾸어야 합니다.
    xPath node의 자리에 원하는 탐색 노드를 넣고 검색한뒤에
    마지막 TFHppleElent *element에서 원하는 값 (content, src, alt....)를
    꺼내서 사용하면 html파싱완료.



    xPath를 전혀 모르시는 분을 위해, search 에 들어갈 값은...

    HTML : <a href="www.google.com">google</a>

    google을 찾으려면 -
    조건
    : search:@"//a" 
    반환 : value = [[elements objectAtIndex:0] content];
    결과 : google

    www.google.com 을 찾으려면 -
    조건 :
    search:@"//a"
    반환 :
    value = [[[elements objectAtIndex:0] attributes] objectForKey:@"href"];
    결과 : www.google.com 

    댓글

Designed by Tistory.