【问题标题】:Scraping using Html Agility Package使用 Html 敏捷包进行抓取
【发布时间】:2015-07-14 16:12:19
【问题描述】:

我正在尝试使用 HtmlAgilityPackage 从新闻文章中抓取数据,链接如下http://www.ndtv.com/india-news/vyapam-scam-documents-show-chief-minister-shivraj-chouhan-delayed-probe-780528

我在下面编写了以下代码来提取本文中的所有 cmets,但由于某种原因,我的变量 aTags 返回空值

代码:

var getHtmlWeb = new HtmlWeb();
        var document = getHtmlWeb.Load(txtinputurl.Text);
        var aTags =    document.DocumentNode.SelectNodes("//div[@class='com_user_text']");
        int counter = 1;
        if (aTags != null)
        {
            foreach (var aTag in aTags)
            {
                lbloutput.Text += lbloutput.Text + ". " + aTag.InnerHtml + "\t" + "<br />";
                counter++;
            }
        }

我也使用过这个 XPath,但结果还是一样 //div[@class='newcomment_list']/ul/li/div[@class='headerwrap']/div[@class='com_user_text'] 请帮助我使用正确的 Xpath 来提取所有 cmets 找遍了整个网络,但没有解决方案。

【问题讨论】:

    标签: html asp.net xpath html-agility-pack


    【解决方案1】:

    在页面上执行“查看源代码”并搜索com_user_text。用户 cmets 根本不出现。它们在页面加载后通过 javascript 加载。所以当你通过getHtmlWeb.Load()加载页面内容的时候,是不会得到用户cmets的。

    正如this answer 所说,HTML Agility 不是一个能够模拟浏览器和运行 javascript 的工具。相反,您需要像 WatiN 这样的“允许通过给定的浏览器引擎以编程方式访问网页并加载完整文档”的东西。

    【讨论】:

    • P.S.欢迎来到堆栈溢出。您似乎已两次发布此问题...这是故意的吗?
    • 先生,您的意思是说我无法使用 HtmlAgilityPackage 完成任务...您建议我使用 WaitN 这类似于 HAP
    • @user3818862:它是相似的,除了不是简单地将 HTML 解析为树结构并让您从中选择节点(就像 HAP 那样),Watir/WatiN 驱动一个实际的 Web 浏览器,它确实更多...包括运行 Javascript,以便您可以测试动态页面。
    • Hi Sir Hi @LarsH 只是想知道..使用 Html Agility Pack 完全加载 javascript 后是否可以从网页中抓取内容
    • @user3818862:不,我不这么认为。 HAP 仅获取 HTML,将其解析为树结构,并让您从中选择节点,例如使用 XPath。它不运行 Javascript 代码。请参阅stackoverflow.com/a/11394830/423105 了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    相关资源
    最近更新 更多