【问题标题】:C# Best Buy Web Scraping - Can't get add to cart elementC# Best Buy Web Scraping - 无法添加到购物车元素
【发布时间】:2021-03-26 23:16:27
【问题描述】:

我正在编写一个简单的网络抓取应用程序来检索某些 PC 组件的信息。

我使用 Best Buy 作为我的测试网站,我使用 HTMLAgilityPack 作为我的爬虫。

我可以检索标题和价格;但是,我似乎无法获得可用性。

所以,我正在尝试阅读“添加到购物车”按钮元素的文本。如果可用,则显示为“添加到购物车”,否则显示为“不可用”。

但是,当我获取 XPath 并尝试将其保存到变量时,它返回 null。有人可以帮帮我吗?

这是我的代码。

var url = "https://www.bestbuy.com/site/pny-nvidia-geforce-gt-710-verto-2gb-ddr3-pci-express-2-0-graphics-card-black/5092306.p?skuId=5092306";
HtmlWeb web = new HtmlWeb();
HtmlDocument pageDocument = web.Load(url);

string titleXPath = "/html/body/div[3]/main/div[2]/div[3]/div[1]/div[1]/div/div/div[1]/h1";
string priceXPath = "/html/body/div[3]/main/div[2]/div[3]/div[2]/div/div/div[1]/div/div/div/div/div[2]/div/div/div/span[1]";
string availabilityXPath = "/html/body/div[3]/main/div[2]/div[3]/div[2]/div/div/div[7]/div[1]/div/div/div[1]/button";

var title = pageDocument.DocumentNode.SelectSingleNode(titleXPath);
var price = pageDocument.DocumentNode.SelectSingleNode(priceXPath);
bool availability = pageDocument.DocumentNode.SelectSingleNode(availabilityXPath) != null ? true : false;

Console.WriteLine(title.InnerText);
Console.WriteLine(price.InnerText);
Console.WriteLine(availability);

它正确输出了标题和价格,但可用性始终为空。

【问题讨论】:

    标签: c# web-scraping xpath web-crawler html-agility-pack


    【解决方案1】:

    试试string availabilityXPath = "//button[. = 'Add to Cart']"

    在网页抓取中,虽然长时间生成的 xpath 将始终在同一个静态页面上工作,但当您处理同一商店中的多个页面时,某些元素的位置可能会漂移并破坏您的 xpath。你的在/html/body/div[3]/main/div[2]/div[3]/div[2]/div/div/div[7]/div[1]/div 中断了,我怀疑这就是这里发生的事情。

    学习从头开始编写将是非常宝贵的(并且更容易调试!)。

    【讨论】:

    • 甚至可能是 //button[contains(@class, 'add-to-cart-button')]
    • 感谢您的回复。我试过了,它似乎工作,我将不得不查找语法,但我认为它与寻找匹配的文本有关。我明白您所说的与多页不一致的意思,但是,为什么 XPath 不适用于这一页?理论上应该是吧?
    • 在我看来,如果产品不可用,按钮就不需要存在(不能点击它添加到购物车,没有可用的),所以“不可用”文本会进入父元素,如果按钮可用,按钮所在的位置。基本上,您可能需要寻找两个元素,一个是可用的(例如按钮),另一个是产品不可用的(例如 div)。如果没有找到 button 元素,要么使用缺少按钮来表示它不可用,要么如果您想明确知道,则返回并查找 div。
    • @DJG 它是否应该工作取决于你如何生成它,但我只能告诉你它没有。如果您想进一步研究,这里是 Xpath 语法的几个起点之一。 w3schools.com/xml/xpath_syntax.asp
    • @quaabaam 是的,所以乔治的 XPath 是正确的,因为售罄和添加到购物车的元素名称是相同的
    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    相关资源
    最近更新 更多