2013-04-22 2 views
2

HTML 파일 (XML 없음)의 일부 내용을 구문 분석하고 싶습니다.mochiweb_html에서 얻은 결과 구문 분석

내가 mochiweb_html 사용하여 구문 분석하는 구조를 검색하는 순간

:

1> inets:start(). 
2> {ok, {Status, Headers, Body}} = httpc:request("http://www.google.com"). 
3> {String, Attributes, Other} = mochiweb_html:parse(Body). 

결과는 뭔가 같은 : mochiweb_http에서 얻은 구조에서 검색 할 수있는 가장 좋은 방법은 무엇

{<<"html">>, 
[{<<"itemscope">>,<<"itemscope">>}, 
    {<<"itemtype">>,<<"http://schema.org/WebPage">>}], 
[{<<"head">>,[], 
    [{<<"meta">>, 
    [{<<"itemprop">>,<<"image">>}, 
     {<<"content">>,<<"/images/google_favicon_128.png">>}], 
    []}, 
    {<<"title">>,[],[<<"Google">>]}, 
.... 

특정 클래스 (예 : <span id="footer">)를 가진 특정 태그를 가진 웹 페이지의 모든 요소?

답변

6

당신은 mochiweb_xpath을 사용할 수

> mochiweb_xpath:execute("//span[@id='footer']", 
    mochiweb_html:parse(
     "<html><body><span>not this one</span><span id='footer'>but this one</span></body></html>")). 
[{<<"span">>, 
    [{<<"id">>,<<"footer">>}], 
    [<<"but this one">>]}] 
1

성능 요구 사항에 따라 다릅니다.

mochiweb 결과는 xmerl에 적합한 입력으로 쉽게 변환 될 수있는 3 중 튜플 형식입니다. 대부분의 작업은 속성 이름을 원자로 변환하는 것입니다. 그렇다면 xmerl_xpath을 사용하여 꽤 유연한 쿼리를 수행 할 수 있습니다.

그렇지 않으면 무언가를 덜 유연하게 (그러나 더 빨라서) 트리를 걸어 갈 수 있습니다.

+0

사실. 당신이 필요로하는 것을 얻기 위해 나무를 걷기 만하면됩니다. –

+0

예제를 제공해 주실 수 있습니까? 나는 붙어있다 : ( – user601836

+0

나는 @legoscia가 제공하는 솔루션을 더 좋아한다. 나는 mochiweb_xpath에 대해 몰랐다. – EdF