如何抓取数据
本文关键字:数据 抓取 何抓取 | 更新日期: 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
您还将获得所有图像和描述:-)