【问题标题】:Cheerio not selecting certain elements that ARE present in HTML stringCheerio 没有选择 HTML 字符串中存在的某些元素
【发布时间】:2016-06-23 15:18:55
【问题描述】:

我正在尝试抓取一个网站,但我遇到了一个问题,即使用 Request JS,我得到了一个要传递给 Cheerio 的 HTML 字符串。

令人困惑的部分是我试图抓取的 HTML 字符串中确实存在一些部分,但是当我使用 Cheerio 尝试抓取它们时,虽然它在那里却找不到它......

例如,在另一个表的最后一行内有一个带有 ID 的表,我希望通过使用该 ID 作为选择器,我可以获取所有子 TR,但是我得到的是第一个 TR,然后是另一个里面有一个 TD,然后是第二个 TR 的突然关闭,然后是表格的结束标记。

从console.logging HTML 字符串发送到cheerio.load 之前,我可以看到第二个TR 中显然有更多信息,然后是在关闭该表之前的多个其他TR。但是当我通过cheerio 运行它时,它告诉我的不是这个。

现在正在查看其余部分(尽管不知道这是否重要...)我注意到其中有 href="javascript:void(0)" —— 这样的事情会不会让 Cheerio 失望?

感谢您的帮助。

经过进一步调查,如果我使用 'td:contains("this text")' 之类的选择器,则会出现此问题。但据我所知,没有任何其他方式。

另外,javascript:void(0) 没有引起问题,我使用正则表达式删除了它的所有实例,但仍然有谜团。

【问题讨论】:

    标签: jquery cheerio


    【解决方案1】:

    事实证明,代码编写时出错,可能是为了阻止抓取。有一个标签<font></div> 结束,这不知何故破坏了cheerio 的解析能力。

    html = html.replace(/[<]font size[=]["]1["][>]\d[<]\/div[>]/g, ""));

    【讨论】:

    • 那么如何在字体标签中获取信息呢?我用$('table').eq(0).find('tr').eq(i+2).find('td').eq(2).find('font')
    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2020-09-05
    • 2018-10-08
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2015-09-16
    • 2021-07-30
    相关资源
    最近更新 更多