jquery抓取网页内容(使用HtmlAgilityPack一段时间.....推荐答案)

优采云 发布时间: 2022-04-14 11:24

  jquery抓取网页内容(使用HtmlAgilityPack一段时间.....推荐答案)

  问题描述

  我已经使用 HtmlAgilityPack 有一段时间了,但是我现在使用的 Web 资源有一个(看起来像)浏览器通过的 jQuery 协议。我希望加载的是产品页面,但实际加载的是(通过 WebBrowser 控件和 WebClient DownloadString Verification)是一个重定向,它要求访问者选择顾问并与他们注册。

  换句话说,使用 Chrome 的 Inspect >> Elements 工具,我得到:

  

  但是 WebBrowser 和 HTMLAgilityPack 只能得到:

  

×

It looks like you haven't selected a Consultant yet!

<p style="text-align: center;">...were you just wanting to browse or were you looking to shop and pick a Consultant to shop under?

...

</p>

  在深入研究标题的类定义后,我发现页面确实使用 jQuery 来处理正确的加载,并在访问者浏览页面时处理操作(滚动、调整大小、悬停在图像上、选择其他图像等)。这是来自 jQuery 的标头:

  /*!

* jQuery JavaScript Library v2.1.4

* http://jquery.com/

*

* Includes Sizzle.js

* http://sizzlejs.com/

*

* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors

* Released under the MIT license

* http://jquery.org/license

*

* Date: 2015-04-28T16:01Z

*/

  我按照此处所述尝试了 ScrapySharp:C# .NET: Scraping Dynamics (JS) 网站

  但这最终会消耗所有可用内存并且什么也不会产生。

  这也是:htmlagilitypack 和动态内容问题加载错误重定向如上。

  如果需要,我可以提供更多我试图从中提取的源代码,包括完整的 jQuery。

  推荐答案

  使用 CaptureRedirect = false; 绕过重定向页面。对于您提到的页面,这对我有用:

  var web = new HtmlWeb();

web.CaptureRedirect = false;

web.BrowserTimeout = TimeSpan.FromSeconds(15);

  现在继续尝试,直到您在页面上看到文本“产品描述”。

  var doc = web.LoadFromBrowser(url, html =>

{

return html.Contains("Product Description");

});

  最新版本的 HtmlAgilityPack 可以在后台运行浏览器。所以我们真的不需要像 ScrapySharp 这样的库来抓取动态内容。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线