【问题标题】:Webpage parsing in C# .Net with AngleSharp Results in Null在 C# .Net 中使用 AngleSharp 解析网页结果为 Null
【发布时间】:2017-05-18 00:49:43
【问题描述】:

我正在尝试使用 AngleSharp 在 walmart.com 上抓取一些页面,但由于某种原因它无法正常工作。过去我一直在使用 AngleSharp 抓取许多网站,没有问题,但在这里它就不行了。

为简单起见,这里有一页:https://www.walmart.com/ip/50908276,我正在尝试获取商品的价格(目前为 9.99 美元)。在 Chrome 的控制台中,当我输入 document.getElementsByClassName("Price-characteristic") 时,我会得到一个包含 60 个 [span.Price-characteristic] 结果的列表。完美的。但是,当我尝试使用 AngleBrackets 进行相同操作时,它不会返回任何结果。

这是我的代码:

using AngleSharp;
using AngleSharp.Dom;

public async void GetPrice()
{
    var config = Configuration.Default.WithDefaultLoader();
    string address = "https://www.walmart.com/ip/50908276";

    IDocument document = await
    BrowsingContext.New(config).OpenAsync(address);

    var priceDollar = document.GetElementsByClassName("Price-characteristic");
}

我对 HTML 不太熟悉,因此对于任何明显的无知,我深表歉意。

【问题讨论】:

    标签: c# .net web-scraping html-parsing anglesharp


    【解决方案1】:

    使用HtmlAgilityPack 和 XPath

    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
        var html = await client.GetStringAsync("https://www.walmart.com/ip/50908276");
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);
        var price = doc.DocumentNode
                        .SelectSingleNode("//*[@data-product-price]")
                        .Attributes["data-product-price"]
                        .Value;
    
    }
    

    此代码返回 price 作为 9.99

    【讨论】:

    • 这给了我一个 NullReferenceException。
    • @SamWhite 不,我现在刚刚尝试过,它返回 9.99
    • 这很奇怪。尽我所能,它对我不起作用。请注意我的无知,但是您从哪里获得“数据产品价格”?我似乎在源代码或 Inspect 中的任何地方都找不到它。
    猜你喜欢
    • 2015-08-22
    • 2017-10-16
    • 2020-03-31
    • 2016-07-05
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多