- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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>
</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>
& </div>
未打开的标签。那么我如何使用cheerio和nodejs获取Data1,Data2,Data3,Data4?任何其他库也可以有效地解析此类数据
编辑(解决方案):问题已解决。我所做的只是将 html 标签转换为小写,效果很好。我不知道为什么小写很重要,但它只适用于 Cheerio
最佳答案
cheerio
是围绕 htmlparser2
构建的,它应该是“宽容的”。如果它无法解析您的页面,而且我知道这违背了传统观念,我会使用正则表达式进行解析。这是假设页面结构不会发生太大变化,并且只是您尝试解析的一个页面。
此外,我注意到示例 HTML 顶部有一个指向 individuals.php
的链接。您想要的数据是否可以以不同的、更易于解析的格式存在?
哦,抓取时要尊重人们的隐私和网站使用条款。
关于node.js - 使用 Node Js 和 Cheerio 解析损坏的 HTML 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119201/
我有一个 cheerio 对象: const $ = cheerio.load('') 这是一个简单的例子,但要复杂得多。 我需要克隆它,这样我就可以在不影响它的情况下用它做不同的事情。 这是我目前所
在 Cheerio 中,如何仅获取当前节点的文本? var cheerio = require('cheerio') const htmlString = 'helloworld' $ = cheer
我有这段代码: const response = await request.get( `https://www.youtube.com/watch?v=yURRmWtbTbo&sp=EgI
我是 JavaScript 的新手,我很确定我错过了从 HTML 页面(由 Web 浏览器浏览)使用 JS 的一些基本知识。 我的目标是从 a dynamic website 中删除照片链接使用 ch
我发布了我的问题希望有人能帮助我,我尝试抓取所有具有机器人属性的链接使用cheerio,我向一个url发出请求,它以字符串形式检索一个html页面。 test
我正在解析一个网站,并且有多个看起来像这样的表。 Saturday 每个表的表类名称都是唯一的。 我想为这个特定表中的每一行提取 Linking 的跨度类,但我正在努力选择要使
如果我有以下 html 代码: Random stuff blabla 如何使用cheerio提取title和href的所有值?我尝试了以下操作,但它只会提取 hello 和 fb.com 并跳过其余
我正在使用cheerio 来修改我从网站上抓取的HTML。然而,它搞乱了配额。 这个脚本工作正常,唯一的问题是,它正在将 ' 更改为 " // Load in HTML $
https://www.cbf.com.br/futebol-brasileiro/competicoes/campeonato-brasileiro-serie-a/2018/1?ref=botao
我有以下代码: var cheerio = require('cheerio'); var html = " Header 1 Header 2 Header 3"; var $ = cheerio.
嘿,伙计们,女士们,首先这是我在 stackoverflow 中的第一个问题,所以不要对我太苛刻......但是 w/e :P。我有个问题..我对网络抓取完全陌生,目前我遇到无法选择正确元素的问题。我
我有一个 html 看起来像: 132 Purple Grove Albany, Texas 76801 Phone: (111) 111-
我有一个代码,可以对特定页面进行网络废弃。我使用 puppeteer+cheerio 来做到这一点。在我的笔记本电脑上代码完美运行。但是在将它部署到 VDS 之后,cheerio each() 选择器
如何获取选择器的 css 属性? 有html 和 my_class 的一些属性 .my_class { color: red } 在 JS 代码中,我使用的是 cheerio 库: va
我正在尝试检查 2 个 html 表格的元素: head1 value1
我有一个类似这样的 html 页面,其中包含 2 个产品和基于条件的不同版本,在本例中 1 个产品有 4 个条件
在 Cheerio/Jquery documentation据说, return false 应该尽早中断每个循环。 我有以下代码: "use strict"; let cheerio = requi
我有一些这样的 HTML: Code: 12345 Category: faucets 我想获取类别名称(“水龙头”)。这是我的试用版: var $ = cheerio.load(html.conte
我是 JavaScript 的新手,我很确定我错过了从 HTML 页面(由 Web 浏览器浏览)使用 JS 的一些基本知识。 我的目标是从 a dynamic website 中删除照片链接使用 ch
大家晚上好 我研究了 cheerio 并尝试解析来自网站的数据。它的结构如下,我直接上正文: Text A Sub-Text A some text Sub-Text B some t
我是一名优秀的程序员,十分优秀!