C# .NET:抓取动态 (JS) 网站
C# .NET: Scraping dynamic (JS) websites
经过几个小时的失败,我来到这里。我需要抓取一个动态生成的网页(使用 Vue.JS 制作,但我不想分享 link)。
我尝试了多种方法 (1, 2, 3)。 None 个在此网页上工作。
最有前途的解决方案是使用 Selenium 和 PhantomJS。我这样试过,但我不确定为什么它对 Google:
不起作用
private void button1_Click(object sender, EventArgs e) {
PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
service.IgnoreSslErrors = true;
service.LoadImages = false;
service.ProxyType = "none";
var driver = new PhantomJSDriver(service); // I also tried: new PhantomJSDriver();
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10);
driver.Url = "https://google.com";
driver.Navigate();
var source = driver.PageSource;
textBox1.AppendText(source);
}
没有成功:
我也尝试使用 WebBrowser 控件,但页面从未完全加载:
(编辑: 我发现 WebBrowser 只是实例化 IE,在尝试在独立 IE 浏览器中打开目标网站后,该网页也从未完全加载,所以这是有道理的在 WebView 中看到相同的行为。由于这个事实,我认为我必须使用 Selenium 和 PhantomJS。)
当然这不应该这么复杂。如何正确操作?
如果你需要抓取一个网站,你可以使用 ScrapySharp 抓取框架。您可以将其作为 nuget 添加到项目中。
https://www.nuget.org/packages/ScrapySharp/
安装包 ScrapySharp -版本 2.6.2
它有许多有用的属性来访问 page.For 示例中的不同元素,要访问整个 HTML 页面,您可以使用以下内容:
ScrapingBrowser Browser = new ScrapingBrowser();
WebPage PageResult = Browser.NavigateToPage(new Uri("http://www.example-site.com"));
HtmlNode rawHTML = PageResult.Html;
Console.WriteLine(rawHTML.InnerHtml);
Console.ReadLine();
经过几个小时的失败,我来到这里。我需要抓取一个动态生成的网页(使用 Vue.JS 制作,但我不想分享 link)。
我尝试了多种方法 (1, 2, 3)。 None 个在此网页上工作。
最有前途的解决方案是使用 Selenium 和 PhantomJS。我这样试过,但我不确定为什么它对 Google:
不起作用private void button1_Click(object sender, EventArgs e) {
PhantomJSDriverService service = PhantomJSDriverService.CreateDefaultService();
service.IgnoreSslErrors = true;
service.LoadImages = false;
service.ProxyType = "none";
var driver = new PhantomJSDriver(service); // I also tried: new PhantomJSDriver();
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(10);
driver.Url = "https://google.com";
driver.Navigate();
var source = driver.PageSource;
textBox1.AppendText(source);
}
没有成功:
我也尝试使用 WebBrowser 控件,但页面从未完全加载:
(编辑: 我发现 WebBrowser 只是实例化 IE,在尝试在独立 IE 浏览器中打开目标网站后,该网页也从未完全加载,所以这是有道理的在 WebView 中看到相同的行为。由于这个事实,我认为我必须使用 Selenium 和 PhantomJS。)
当然这不应该这么复杂。如何正确操作?
如果你需要抓取一个网站,你可以使用 ScrapySharp 抓取框架。您可以将其作为 nuget 添加到项目中。 https://www.nuget.org/packages/ScrapySharp/
安装包 ScrapySharp -版本 2.6.2
它有许多有用的属性来访问 page.For 示例中的不同元素,要访问整个 HTML 页面,您可以使用以下内容:
ScrapingBrowser Browser = new ScrapingBrowser();
WebPage PageResult = Browser.NavigateToPage(new Uri("http://www.example-site.com"));
HtmlNode rawHTML = PageResult.Html;
Console.WriteLine(rawHTML.InnerHtml);
Console.ReadLine();