【问题标题】:Scraping data using HTMLAgilityPack使用 HTMLAgilityPack 抓取数据
【发布时间】:2012-07-20 17:12:55
【问题描述】:

在HTMLAgailityPack中,如何从网站的innerhtml方法中获取数据。例如,如果在下面的链接中:

https://www.theice.com/productguide/ProductSpec.shtml?specId=1496#expiry

innerhtmltext 中没有以合约符号开头的表格。请告诉我如何通过 HTMLAgailityPack 获取此表数据?

问候

【问题讨论】:

    标签: c# html-parsing web-scraping html-agility-pack


    【解决方案1】:

    你需要向https://www.theice.com/productguide/ProductSpec.shtml?expiryDates=&specId=1496&_=1342907196619发送一个GET请求

    内容正在通过 javascript 动态加载。也许您可以解析 innerhtmltext 以查看 javascript 会将 GET 请求发送到哪个链接

    【讨论】:

    • 您能否详细说明,尤其是在从中解析 HTMLDocument 时,如何通过代码向网站发送 get 请求?
    【解决方案2】:

    如果它不是“进入innerhtml”,则意味着它是由脚本放入其中的。我自己无法查看此页面,所以我不确定。

    如果它来自脚本,你就不能很容易地得到它。您可以查看 javascript 并可能能够读取传入的数据。

    基本上在您的浏览器上安装 Firebug,然后查看正在进行的数据传输。有时你很幸运,有时你不是。

    或者您可以采取简单的方法并使用 winforms WebBrowser 控件,将其加载到其中,让它运行脚本然后从那里抓取。请注意,这会像疯了一样泄漏内存和 GDI 句柄。

    【讨论】:

    • 好吧,我尝试使用 windows 窗体,该程序在 windows XP 和 32 位机器上运行良好,但在 windows 7 和 64 bot 机器上,它返回 System.__ComObject 中的所有元素网页使我能够解析所需元素的数据。
    【解决方案3】:

    请使用此 XPath 获取您想要的表 //*[@id="right"]/div/table

    例如

    HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id="right"]/div/table"));
    string html = node.InnerHtml;
    

    【讨论】:

    • 但在 HTMLDocument 中没有名为 selectsinglenode 的方法
    • doc.documentNode.SelectSingleNode 应该这样做。
    • @nishantjain 我很抱歉我匆忙输入,我已经更正了我的答案,Haedrian 是对的
    • 嗨它给出了一个错误,说“对象引用未设置为对象的实例”。对不起,但我对这种工作很陌生,所以如果我需要获取上面给出的节点的确切参考,请告诉我。如果我必须参考页面 HTML 中指定的实际表格标签,我怎么知道它没有出现在页面上...
    • 下面是代码: var document = new HtmlAgilityPack.HtmlDocument(); document.OptionReadEncoding = false; var url =new Uri("theice.com/productguide/…); var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; using (var response = (HttpWebResponse)request.GetResponse()) { using ( var stream = response.GetResponseStream()) { document.Load(stream, Encoding.GetEncoding("iso-8859-9")); } }
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多