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>
</td>
</tr>
</table>
<P>
<TABLE CELLPADDING=8><TR><TD> </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에만 효과가 있었습니까?
regexes로 긁어 모으는 것은 그리 어렵지 않습니다. 특히 페이지의 서식이 모두 비슷한 경우에 특히 그렇습니다. 여기 : http://pastebin.com/SRDYBxpX는 piratebay를 긁는 파이썬으로 작성된 예제입니다. Regexes는 닫는 태그와 여는 태그의 문제를 무시한다는 확실한 이점이 있습니다. 주어진 데이터를 포함하는 태그를 사용하여 주어진 정규식을 안전하게 구분할 수 있습니다. –