2013-08-08 2 views
1

Nodejs & Cheerio를 사용하여 표 형식의 데이터가 포함 된 순수한 정적 HTML 페이지를 긁어 내려고합니다. 그러나 문제는 그 페이지가 적절한 HTML DOM을 가지고 있지 않느냐는 것입니다. 내 말은 닫히지 않은 시작 태그가 많이 있다는 뜻입니다. 구멍이없는 다른 닫는 태그 (</table>)가 있습니다.Nodejs & Cheerio를 사용하여 깨진 HTML 코드를 구문 분석

샘플 코드 : 사람이 볼 수 있듯이 폐쇄하지 않는 P 태그가

<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" bgcolor="#FFFFFF" text="#000000" link="#003399" vlink="#003399" alink="#FF8000"> 
    <table border="0" cellpadding="0" cellspacing="0" width="100%"> 
     <tr><td bgcolor="#445BC6">hii</td></tr> 
     <tr><td></td></tr> 
     <tr> 
      <td align="right" bgcolor="#D9D9E8" width="100%"> 
       <p class="menu"><b><font color="#000000"><a href="details.php?type=contact&npo_id=18430">Individuals</a></font></b>&nbsp;&nbsp; 
      </td> 
     </tr> 
    </table> 
    <P> 
    <TABLE CELLPADDING=8><TR><TD>&nbsp;</TD><TD> 
       <TABLE CELLPADDING=8 STYLE="border-collapse: collapse" BORDER=1 WIDTH=80% ALIGN=cemter> 

        <TR><TD BGCOLOR="D8D8C4" VALIGN=top ALIGN=right><P><B>Data 1</B></TD> 
         <TD><P><B>Data 2</B></TD> 
        </TR> 
        <TR><TD BGCOLOR="D8D8C4" VALIGN=top ALIGN=right><P><B>Data 3</B></TD> 
         <TD><P>Data 4</TD> 
        </TR> 


       </TABLE> 
      </TD></TR></TABLE>   <tr> 
    <td width="100%" valign="bottom" colspan="2" align="center"> 
     <p> 
      <a href="#top">another dirty content</a><br> 
      <a href="#top"><font color="#000000">table is wrong</font></a></p> 
    </td> 
</tr></table></div> 

 

(경고는 코드 & HTML이 고장 실제 샘플에 가까운) .. 하단에는 </table> &태그가 없습니다. 그럼 cheerio & nodejs를 사용하여 Data1, Data2, Data3, Data4를 가져 오는 방법은 무엇입니까? 그러한 데이터를 파싱하는 데 효율적인 다른 라이브러리도 있습니다.

EDIT (솔루션) : 문제가 해결되었습니다. 내가 한 모든 일은 html 태그를 소문자로 변환 한 것뿐입니다. 왜 소문자가 중요 할 지 모르지만 cheerio에만 효과가 있었습니까?

+0

regexes로 긁어 모으는 것은 그리 어렵지 않습니다. 특히 페이지의 서식이 모두 비슷한 경우에 특히 그렇습니다. 여기 : http://pastebin.com/SRDYBxpX는 piratebay를 긁는 파이썬으로 작성된 예제입니다. Regexes는 닫는 태그와 여는 태그의 문제를 무시한다는 확실한 이점이 있습니다. 주어진 데이터를 포함하는 태그를 사용하여 주어진 정규식을 안전하게 구분할 수 있습니다. –

답변

0

cheeriohtmlparser2이고 " 용서 "한다. 귀하의 페이지를 구문 분석하지 못하고 이것이 일반적인 지혜에 어긋나는 것이라면 정규 표현식을 사용하여 구문 분석합니다. 이것은 페이지 구조가 많이 변하지 않을 것이라고 가정하고 있으며, 분석하려는 페이지는 하나뿐입니다.

또한 샘플 HTML의 상단에있는 링크가 individuals.php 인 것으로 나타났습니다. 거기에있는 데이터가 다른 형식으로 파싱 할 수 있습니까?

오, 근근이 살아가는 사람들의 개인 정보 및 사이트 사용 약관을 존중하십시오.