【问题标题】:HTMLAgilityPack load AJAX content for scrapingHTMLAgilityPack 加载 AJAX 内容以进行抓取
【发布时间】:2014-07-23 09:44:53
【问题描述】:

我正在尝试在 c# webforms 项目中使用 HTMLAgilityPack 抓取网页。

我见过的所有解决方案都使用 WebBrowser 控件。但是,据我所知,这仅在 WinForms 项目中可用。

目前我通过此代码调用所需的页面:

var getHtmlWeb = new HtmlWeb();
var document = getHtmlWeb.Load(inputUri);
HtmlAgilityPack.HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//div[@class=\"nav\"]");

我看到的使用 WebBrowser 控件的代码示例:

if (this.webBrowser1.Document.GetElementsByTagName("html")[0] != null)
_htmlAgilityPackDocument.LoadHtml(this.webBrowser1.Document.GetElementsByTagName("html")[0].OuterHtml);

任何关于如何在加载 AJAX 后抓取页面的建议/指针,我们将不胜感激。

【问题讨论】:

标签: c# asp.net ajax winforms html-agility-pack


【解决方案1】:

似乎使用 HTMLAgilityPack 只能抓取通过 html 本身加载的内容。因此,通过 AJAX 加载的任何内容对 HTMLAgilityPack 都是不可见的。

也许最简单的选择(在可行的情况下)是使用基于浏览器的工具(例如 Firebug)来确定 AJAX 加载的数据的来源。然后直接操作源数据。这样做的另一个优势可能是能够抓取更大的数据集。

【讨论】:

    【解决方案2】:

    我整天都在努力解决这个问题,所以这里有一个 FedEx 跟踪示例,说明接受的答案指的是什么(我认为):

            Dim body As String
            body = "data={""TrackPackagesRequest"":{""appType"":""WTRK"",""appDeviceType"":""DESKTOP"",""supportHTML"":true,""supportCurrentLocation"":true,""uniqueKey"":"""",""processingParameters"":{},""trackingInfoList"":[{""trackNumberInfo"":{""trackingNumber"":" & Chr(34) & "YOUR TRACKING NUMBER HERE" & Chr(34) & ",""trackingQualifier"":"""",""trackingCarrier"":""""}}]}}"
            body = body & "&action=trackpackages&locale=en_US&version=1&format=json"
    
            With CreateObject("MSXML2.XMLHTTP")
                .Open("POST", "https://www.fedex.com/trackingCal/track", False)
                .setRequestHeader("Referer", "https://www.fedex.com/apps/fedextrack/?tracknumbers=YOUR TRACKING NUMBER HERE")
                .setRequestHeader("User-Agent", "Mozilla/5.0")
                .setRequestHeader("X-Requested-With", "XMLHttpRequest")
                .setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
                .send(body)
                Dim Reply = .responseText
            End With
    

    您是否考虑过使用 Cefsharp.net 将浏览器构建到您的应用程序中,然后通过 .net 界面使用开发工具?

    您可能已经注意到,即使是动态 AJAX/JS 生成的 HTML 也可以使用例如Firefox 中的检查元素选项。因此,即使您无法使用传统的 HTML 抓取方法抓取该代码,该代码仍会保存在您的计算机上。

    要考虑的另一种选择。

    https://cefsharp.github.io/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2017-11-12
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多