3 回答
TA贡献1802条经验 获得超6个赞
有几种方法可以实现您的需要(考虑 C# 控制台应用程序)。
也许最简单的方法是使用与浏览器实例交互的工具,即 Selenium(用于单元测试)。所以:
安装 Selenium.WebDriver nuget 包
安装一个浏览器来运行你的应用程序(假设是 chrome)
下载浏览器驱动程序 ( chromedriver )
写一些类似的东西:
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 包来解析它)。
专业硒:
易于互动
行为与您在浏览器中看到的相同
缺点硒:
您需要安装 chrome 或其他浏览器
当您与浏览器交互时浏览器正在运行
浏览器下载完整页面(图像、html、js、css...)
专业手册:
你只加载你需要的
不依赖于外部程序(即浏览器)
缺点手册:
你需要了解 html/js 是如何工作的
您需要手动解析 json/html
在这种特定情况下,我更喜欢第二种选择。
TA贡献1825条经验 获得超4个赞
阅读有关 C# 的 Selenium 自动化工具,但它会打开您想要删除的每个网页,然后例如返回源代码或在该网页上执行某些操作。
通常这个工具不是(afaik)用于网络爬虫,但在开始时可能很好,特别是如果您的 dotnet 核心应用程序位于某个虚拟机/docker 上。
但请注意,通过浏览器打开不安全的页面可能会有风险。
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
- 3 回答
- 0 关注
- 196 浏览
添加回答
举报