2013-03-14 74 views
0

目标是在完成Ajax调用后从网站检索数据。 当前页面第一次加载时正在检索数据。但所需的数据是在ajax调用后加载的div内部找到的。延迟一段时间后检索网页数据(网页抓取)

总之,情景如下:

甲网页被称为与一些参数(目前使用CsQuery为C#)内的C#代码通过。当发送请求时,页面打开并显示“加载”图片,并在几秒钟后检索所需数据。然而,cSQuery代码“加载”图片检索第一页内容..

的代码如下

UrlBuilder ub = new UrlBuilder("<url>") 
     .AddQuery("departure", "KHI") 
     .AddQuery("arrival", "DXB") 
     .AddQuery("queryDate", "2013-03-28") 
     .AddQuery("queryType", "D"); 

     CQ dom = CQ.CreateFromUrl(ub.ToString()); 
     CQ availableFlights = dom.Select("div#availFlightsDiv"); 

     string RenderedDiv = availableFlights["#availFlightsDiv"].RenderSelection(); 

回答

4

当“刮”您拨打电话到Web服务器的网站,你得到它所提供的。如果目标网站的DOM由javascript(ajax或其他)修改,那么除非将其加载到正在进行刮取的计算机上的某种浏览器引擎中,否则您将永远不会获得该内容,即可以执行javascript调用。

+1

我想补充一点,如果你想要抓取*非常具体的* ajax驱动的网站,那么完全有可能(通常甚至很容易)只是查看源代码并直接定位它们的内部API。要完成多少工作取决于代码是如何混淆和/或编写的。除此之外,还有硒,硒等。 – 2013-03-14 14:08:55

+0

是的,这是一个很好的观点。 – 2013-03-14 17:38:16

+0

感谢您的评论..任何静默实现这一目标的方法(即没有浏览器窗口),并在最小的资源消耗。特定的ajax调用似乎也发送SessionId来生成结果(因此似乎直接调用可能不可能)。 – 2013-03-18 12:51:51