如何抽取数据

问题描述:

我从这个网址试图刮数据:http://icecat.biz/en/p/Coby/DP102/desc.htm如何抽取数据

我想刮的是来自该网址规格表。

但我检查了spec table没有显示的url的源代码,因为我认为该表使用Ajax加载。

我怎样才能得到那张桌子。需要做什么?

我用下面的代码:

string Strproducturl = "http://icecat.biz/en/p/Coby/DP102/desc.htm"; 
System.Net.ServicePointManager.Expect100Continue = false; 
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(Strproducturl); 
httpWebRequest.KeepAlive = true; 
ASCIIEncoding encoding = new ASCIIEncoding(); 

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
Stream responseStream = httpWebResponse.GetResponseStream(); 
StreamReader streamReader = new StreamReader(responseStream); 
string response = streamReader.ReadToEnd(); 
+0

我第一次的猜测会在这里是你需要进行ajax调用,你可能会得到json,这比网页抓取更容易 – IanNorton 2012-02-11 11:32:10

+0

数据表的ajax调用似乎是urls:http://icecat.biz/index.cgi?ajax = productPage; product_id = 1091664; language = en; request = feature – IanNorton 2012-02-11 11:34:19

+0

但所有这个过程都是自动化的。我给出了你只是为了一个例子的网址。我也检查过响应,但该规范表源是在响应。 – user1203653 2012-02-11 11:40:48

我会建议你使用一个库像HtmlAgilityPack选择HTML文档中的各种元素。

我快速查看了链接,并注意到数据实际上是使用addtional ajax请求加载的。您可以使用以下网址获得AJAX数据

http://icecat.biz/index.cgi?ajax=productPage;product_id=1091664;language=en;request=feature

使用HtmlAgilityPack来分析这些数据。

正如IanNorton提到的那样,您需要向URL请求URL,以便使用AJAX加载规格的URL。对于您提供的示例链接,规格细节URL,你将需要请求将是:

http://icecat.biz/index.cgi?ajax=productPage;product_id=1091664;language=en;request=feature

然后,您可以通过HTML响应你的方式来获得您所需要的规格细节。

您在评论中提到刮取过程是自动化的。规格网址为基本格式,您只需要产品ID即可。但是,如果您没有这些ID,只是一系列网址(例如原始问题中的示例),则需要从您拥有的网址获取产品ID。

例如,你给的网址例如重定向到一个不同的URL:

http://icecat.biz/p/coby/dp102/digital-photo-frames-0716829961025-dp-102-digital-photo-frame-1091664.html

此URL包含产品ID,就在年底。

你可以做一个HttpWebRequest原来的网址,阻止它重定向之前,赶上重定向URL:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://icecat.biz/en/p/Coby/DP102/desc.htm"); 
request.AllowAutoRedirect = false; 
request.KeepAlive = true; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

if(response.StatusCode == HttpStatusCode.Redirect){ 

    string redirectUrl = response.GetResponseHeader("Location"); 

} 

一旦你得到了redirectUrl变量,你可以使用Regex来获取ID然后执行另一个HttpWebRequest到规格详细的URL。

+0

string redirectUrl = response.GetResponseHeader(“Location”); 位置意味着什么?我的意思是我需要进入那里? 你能帮忙吗? – user1203653 2012-02-11 13:06:12

+0

'redirectUrl'的值将成为示例网址重定向到的URL,其中包含产品ID:http://icecat.biz/p/coby/dp102/digital-photo-frames-0716829961025-dp -102-digital-photo-frame-1091664.html这有帮助吗? – 2012-02-11 14:19:39

我知道这是很老,但你可以更容易地距离

https://openIcecat-xml:[email protected]/export/freexml.int/EN/1091664.xml

检索XML您也将获得所有图像和描述以及:-)