【问题标题】:C# asp.net Using WebClient, is there a way to get a web page's rendered Html?C# asp.net 使用 WebClient,有没有办法获取网页呈现的 Html?
【发布时间】:2018-02-19 04:48:04
【问题描述】:

有没有办法使用 WebClient 而不是页面源来获取网页的完全呈现的 html?我正在尝试从页面的 html 中抓取一些数据。我现在的代码是这样的:

WebClient client = new WebClient();            
var result = client.DownloadString("https://somepageoutthere.com/");

//using CsQuery
CQ dom = result;
var someElementHtml = dom["body > main];

【问题讨论】:

  • 如果你想从页面的 html 中抓取数据,为什么需要渲染它?
  • “完全呈现的 html”是什么意思?

标签: c# html asp.net webclient


【解决方案1】:

WebClient 只会返回您请求的 URL。它不会在页面上运行任何 javacript(在客户端上运行),因此如果 javascript 以任何方式更改页面 DOM,您将无法通过 webclient 获得它。

您最好使用其他一些工具。寻找那些将在页面中呈现 HTML 和 javascript 的内容。

【讨论】:

    【解决方案2】:

    我不知道你所说的“完全渲染”是什么意思,但如果你的意思是“所有数据都由 ajax 调用加载”,答案是:不,你不能

    初始html页面中不存在的数据是通过浏览器中的javascript加载的,WebClient不知道javascript是什么,也无法解释它,只有浏览器可以。

    要获取此类数据,您需要识别这些调用(如果您不知道数据 web 服务的 url,您可以使用 Fiddler 等工具),从您的应用程序中模拟/重放它们,然后,如果成功,获取响应数据,并从中提取数据(如果数据是 json 会很容易,如果是 html 会更棘手)

    【讨论】:

      【解决方案3】:

      更好地使用http://html-agility-pack.net

      它具备所有功能,可以抓取网络数据并在网站上提供很好的帮助

      【讨论】:

      • HTML Agility Pack 很方便,但问题已经暗示他们能够获取源代码,并且他们需要执行页面内的一些逻辑以获取更多数据。
      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2012-01-10
      • 2021-06-11
      • 2013-08-21
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多