我正在尝试从此网址抓取数据: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();
答案 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。
例如,您提供的网址示例重定向到其他网址:
此网址包含最终的产品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)
我知道这已经很老了,但您可以更轻松地从
中检索XMLhttps://openIcecat-xml:freeaccess@data.icecat.biz/export/freexml.int/EN/1091664.xml
您还将获得所有图像和说明: - )