使用Nodejs&amp ;;解析损坏的HTML代码Cheerio

时间:2013-08-08 06:22:44

标签: node.js web-scraping cheerio

我正在尝试使用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>&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>

正如可以看到的那样,P标签没有关闭..底部有      </table>&amp; </div>标记未打开。 那么我如何使用cheerio&amp; amp;获取Data1,Data2,Data3,Data4。 nodejs?任何其他库也可以有效地解析这些数据

编辑(解决方案):问题解决了。我所做的只是将html标签转换为小写并且工作正常。我不确定为什么小写很重要但它只适用于cheerio

1 个答案:

答案 0 :(得分:0)

cheerio围绕htmlparser2构建,应该是“原谅”。如果它不解析你的页面,我知道这违背了传统的智慧,我会用正则表达式解析。这假设页面结构不会发生太大变化,而且只是您尝试解析的页面。

另外,我注意到示例HTML顶部的链接指向individuals.php。您之后的数据是否可以以不同的,更可解析的格式存在?

哦,在抓取时尊重人们的隐私和网站使用条款。