我的C#.NET Core控制台应用程序是一个简单的Web搜寻器。在源代码中包含所需数据的页面上,我可以访问所需数据。在可以从窗口复制数据的页面中,可以在浏览器的页面检查器中查看,而不能在源代码中查看,这很麻烦。
请提供有关如何获取此数据的代码示例。
我当前的捕获代码如下:
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">
答案 0 :(得分:1)
有几种方法可以实现所需的功能(考虑C#控制台应用程序)。
也许最简单的方法是使用与浏览器实例进行交互的工具,即Selenium(用于单元测试)。 所以:
写类似:
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脚本基本上从以下URL加载数据: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..."
}
事件属性包含所需的数据(您可以使用HtmlAgilityPack nuget包对其进行解析)。
专业硒:
缺点硒:
专业手册:
缺点手册:
在这种情况下,我更喜欢第二种选择。
答案 1 :(得分:0)
了解有关C#的Selenium Automation工具,但是它将打开您要剪贴的每个网页,然后例如返回源代码或对该网页执行一些操作。
通常,此工具不是Web爬虫的(afaik),但一开始可能会很好,特别是如果您的dotnet核心应用位于某些虚拟机/泊坞窗上。
但是请注意,通过浏览器打开不安全的页面可能会有风险。
答案 2 :(得分:0)
您可能会尝试使用快手削皮特。 它允许您获取当前的HTML状态。
using (var page = await browser.NewPageAsync())
{
await page.GoToAsync("http://www.spapage.com");
var result = await page.GetContentAsync();
}