1

我正在尝试使用 Nodejs 和 Cheerio 抓取带有表格数据的纯静态 html 页面。但问题是,该页面正在尝试抓取没有正确的 HTML DOM。我的意思是,有许多未关闭的开始标签。还有其他</table>没有开口的结束标签()。

示例代码(警告:代码接近真实示例 & 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>&标签。</div>那么如何使用cheerio 和 nodejs 获取 Data1、Data2、Data3、Data4 呢?任何其他库也可以有效地解析此类数据

编辑(解决方案):问题已解决。我所做的只是将 html 标签转换为小写,它工作得很好。我不知道为什么小写很重要,但它只适用于cheerio

4

1 回答 1

0

cheerio是围绕 建立的htmlparser2,这应该是“宽容的”。如果它不解析您的页面,并且我知道这违反了传统观念,我会使用正则表达式进行解析。这是假设页面结构不会发生太大变化,并且只是您尝试解析的那一页。

另外,我注意到您的示例 HTML 顶部有一个链接,指向individuals.php. 你所追求的数据可以以不同的、更可解析的格式存在吗?

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

于 2013-08-08T06:40:42.393 回答