如何刮取数据

时间:2012-02-11 11:29:04

标签: c# web-scraping

我正在尝试从此网址抓取数据:http://icecat.biz/en/p/Coby/DP102/desc.htm

我想从该网址中删除 specs 表。

但是我检查了url的源代码,spec表没有显示,因为我认为该表是使用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();

3 个答案:

答案 0 :(得分:1)

正如IanNorton所提到的,您需要向Icecat用于使用AJAX加载规范的URL发出请求。对于您提供的示例链接,您需要请求的规格详细信息网址为:

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

然后,您可以通过HTML响应来获取所需的规范详细信息。

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

例如,您提供的网址示例重定向到其他网址:

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

此网址包含最终的产品ID。

您可以对原始网址执行HttpWebRequest,在重定向之前停止并抓住重定向网址:

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

答案 1 :(得分:0)

我建议您使用像HtmlAgilityPack这样的库来从html文档中选择各种元素。

我快速查看了链接,发现数据实际上是使用addtional ajax请求加载的。您可以使用以下网址获取ajax数据

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

使用HtmlAgilityPack来解析该数据。

答案 2 :(得分:0)

我知道这已经很老了,但您可以更轻松地从

中检索XML

https://openIcecat-xml:freeaccess@data.icecat.biz/export/freexml.int/EN/1091664.xml

您还将获得所有图像和说明: - )