我正在尝试使用Nodejs&amp ;;来抓取一个带有表格数据的纯静态html页面。 Cheerio。但问题是,页面是我试图刮没有适当的HTML DOM。我的意思是,有许多开放标签没有关闭。还有其他结束标记(</table>
)没有开口。
示例代码(提醒:代码接近真实样本&amp; html已损坏)
<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>
正如可以看到的那样,P标签没有关闭..底部有
</table>
&amp; </div>
标记未打开。
那么我如何使用cheerio&amp; amp;获取Data1,Data2,Data3,Data4。 nodejs?任何其他库也可以有效地解析这些数据
编辑(解决方案):问题解决了。我所做的只是将html标签转换为小写并且工作正常。我不确定为什么小写很重要但它只适用于cheerio
答案 0 :(得分:0)
cheerio
围绕htmlparser2
构建,应该是“原谅”。如果它不解析你的页面,我知道这违背了传统的智慧,我会用正则表达式解析。这假设页面结构不会发生太大变化,而且只是您尝试解析的页面。
另外,我注意到示例HTML顶部的链接指向individuals.php
。您之后的数据是否可以以不同的,更可解析的格式存在?
哦,在抓取时尊重人们的隐私和网站使用条款。