【发布时间】:2014-05-15 13:04:52
【问题描述】:
对于 C# 中的网络爬虫项目,我尝试执行 Javascript 和 Ajax 来检索已爬取页面的完整页面源。
我正在使用需要有效 HttpWebResponse 对象的现有网络爬虫 (Abot)。因此我不能简单地使用driver.Navigate().GoToUrl() 方法来检索页面源。
爬虫下载页面源码,我想在源码里面执行已有的Javascript/Ajax。
在一个示例项目中,我尝试了以下操作但没有成功:
WebClient wc = new WebClient();
string content = wc.DownloadString("http://www.newegg.com/Product/Product.aspx?Item=N82E16834257697");
string tmpPath = Path.Combine(Path.GetTempPath(), "temp.htm");
File.WriteAllText(tmpPath, content);
var driverService = PhantomJSDriverService.CreateDefaultService();
var driver = new PhantomJSDriver(driverService);
driver.Navigate().GoToUrl(new Uri(tmpPath));
string renderedContent = driver.PageSource;
driver.Quit();
您需要以下 nuget 包来运行示例: https://www.nuget.org/packages/phantomjs.exe/ http://www.nuget.org/packages/selenium.webdriver
这里的问题是代码在GoToUrl() 处停止,并且程序终止需要几分钟甚至没有给我驱动程序.PageSource。
这样做会返回正确的 HTML:
driver.Navigate().GoToUrl("http://www.newegg.com/Product/Product.aspx?Item=N82E16834257697");
string renderedContent = driver.PageSource;
但我不想两次下载数据。爬虫(Abot)下载 HTML,我只想解析/渲染 javascript 和 ajax。
谢谢!
【问题讨论】:
-
再次阅读您的问题后,我认为让它在本地文件上运行并没有那么快,因为仍然需要下载javascript和样式等外部文件。您只需减少一个请求。
标签: c# javascript ajax selenium phantomjs