为了账号安全,请及时绑定邮箱和手机立即绑定

从 C# .NET Core 控制台应用程序中的浏览器页面检查器捕获数据

从 C# .NET Core 控制台应用程序中的浏览器页面检查器捕获数据

C#
慕神8447489 2021-11-21 10:10:17
我的 C# .NET Core 控制台应用程序是一个简单的网络爬虫。在源代码中包含所需数据的页面上,我能够访问所需数据。在可以从窗口复制数据的页面中,在浏览器的页面检查器中查看,但不在源代码中,我被卡住了。请提供我如何获取这些数据的代码示例。我当前的捕获代码如下:var htmlCode = string.empty;using (WebClient client = new WebClient()) // WebClient class inherits IDisposable{     // Get the file content without saving it     htmlCode = client.DownloadString("https://www.wedj.com/dj-photo-video.nsf/firstdance.html");}使用上面的代码,您会收到如下所示的源代码:从浏览器检查器中看到的图 1 中显示的数据隐藏在<div class="entry row">
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

有几种方法可以实现您的需要(考虑 C# 控制台应用程序)。

也许最简单的方法是使用与浏览器实例交互的工具,即 Selenium(用于单元测试)。所以:

  1. 安装 Selenium.WebDriver nuget 包

  2. 安装一个浏览器来运行你的应用程序(假设是 chrome)

  3. 下载浏览器驱动程序 ( chromedriver )

  4. 写一些类似的东西:

IWebDriver driver = null;

try

{

    ChromeOptions options = new ChromeOptions();

    options.AddArguments("--incognito");


    driver = new ChromeDriver(options);

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

    driver.Url = "https://www.wedj.com/dj-photo-video.nsf/firstdance.html";


    var musicTable = driver.FindElement(By.Id("musicTable"));

    // interact with driver to get data from the page.

 }

 finally

 {

    if (driver != null)

       driver.Dispose();

 }

否则,您需要更多地调查网页的工作原理。据我所知,该页面加载了一个 javascript,https://www.wedj.com/dj-photo-video.nsf/musiclist.js,它负责从服务器加载音乐列表。这个js脚本基本上从以下网址加载数据:https : //www.wedj.com/gbmusic.nsf/musicList? open & wedj =1& list = category_firstdance & count =100(你也可以在浏览器中打开它)。排除“(”和“)”,结果是一个你可以解析的json(可能使用newtonsoft.json包):


{

  "more": "yes",

  "title": "<h1>Most Requested Wedding First Dance Songs<\/h...",

  "event": "<table class='musicTable g6-table-all g6-small' id='musicTable' borde..."

}

event 属性包含您需要的数据(您可以使用 HtmlAgilityPack nuget 包来解析它)。

专业硒:

  1. 易于互动

  2. 行为与您在浏览器中看到的相同

缺点硒:

  1. 您需要安装 chrome 或其他浏览器

  2. 当您与浏览器交互时浏览器正在运行

  3. 浏览器下载完整页面(图像、html、js、css...)

专业手册:

  1. 你只加载你需要的

  2. 不依赖于外部程序(即浏览器)

缺点手册:

  1. 你需要了解 html/js 是如何工作的

  2. 您需要手动解析 json/html


在这种特定情况下,我更喜欢第二种选择。


查看完整回答
反对 回复 2021-11-21
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

阅读有关 C# 的 Selenium 自动化工具,但它会打开您想要删除的每个网页,然后例如返回源代码或在该网页上执行某些操作。

通常这个工具不是(afaik)用于网络爬虫,但在开始时可能很好,特别是如果您的 dotnet 核心应用程序位于某个虚拟机/docker 上。

但请注意,通过浏览器打开不安全的页面可能会有风险。


查看完整回答
反对 回复 2021-11-21
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您可能想尝试 pupeteer 锐利。它允许您获取当前的 HTML 状态。


using (var page = await browser.NewPageAsync())

{

    await page.GoToAsync("http://www.spapage.com");

    var result = await page.GetContentAsync();

}

https://github.com/kblok/puppeteer-sharp


查看完整回答
反对 回复 2021-11-21
  • 3 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信