如何抓取数据

本文关键字:数据 抓取 何抓取 | 更新日期: 2023-09-27 18:24:02

我正在尝试从这个url中抓取数据:http://icecat.biz/en/p/Coby/DP102/desc.htm

我想从那个url中抓取规格表。

但我检查了规范表没有显示的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();

如何抓取数据

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

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

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

你在评论中提到,抓取过程是自动化的。规格URL是基本格式的,你只需要产品ID。但是,如果你没有ID,只有一系列URL,就像你原来问题中的例子一样,你需要从你的URL中获得产品ID。

例如,您给出的URL示例重定向到不同的URL:

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

此URL在末尾包含产品ID。

您可以对原始URL执行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,然后对规范详细信息URL执行另一个HttpWebRequest操作。

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

我快速查看了一下链接,注意到数据实际上是使用附加ajax请求加载的。您可以使用以下url来获取ajax数据

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

使用HtmlAgilityPack来解析该数据。

我知道这已经很旧了,但您可以更容易地从中检索XML

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

您还将获得所有图像和描述:-)