公文。DocumentNode.QuerySelectorAll 不会重新运行任何内容

document.DocumentNode.QuerySelectorAll does not retrun anything

提问人:Flisp 提问时间:10/13/2023 更新时间:10/13/2023 访问量:29

问:

我尝试访问以下主页上的“div.prod_inner”(见图)以进行网络抓取。 我使用 HtmlAgilityPack,代码在另一个主页上工作,也返回一个元素。"div.lay_main"

Screen dump from the page I try to scrape

这是我使用的代码 (C#):

var productHTMLElements = document.QuerySelectorAll("div.prod_inner);

我也试过

var productHTMLElements = document.DocumentNode.QuerySelectorAll("div.prod_inner");

而且它也不起作用。".prod_inner""prod_inner"

我希望代码用页面上找到的所有同类产品填充一个数组。但数组仍为空。

我是网络抓取的新手。我做错了什么,我该如何做对?

C# 网页抓取 html-agility-pack

评论

0赞 Mark Baijens 10/13/2023
请阅读如何提问,了解如何通过最小可重复性示例提出好问题。您的第一个代码中也有语法错误(缺少 .)"
1赞 Peter B 10/13/2023
检查您的代码是否可能在页面完全加载或呈现之前运行。此外,现在许多网站都是动态的,会在初始页面加载后更新/添加内容。为此,有像 Puppeteer 这样的优秀库,例如参见 youtube.com/watch?v=gWU4XmM96To

答:

0赞 baynezy 10/13/2023 #1

您实际上并没有使用 HtmlAgilityPack,而是使用一个名为 Hazz 的库来扩展 HAP。

我不熟悉这一点,但使用 XPATH 应该可以工作。

doc.DocumentNode.SelectNodes(@"//div[contains(@class, ""prod_inner"")]");

评论

1赞 Flisp 10/16/2023
感谢您的迅速回复。我意识到问题是,我试图访问一个需要登录的网页,我以为我进入了,因为我是通过我的常规浏览器登录的。我终于可以使用 Selenium 使用分步屏幕转储来访问(顺便说一句,我自己的网页)。