【问题标题】:How to scrape data如何抓取数据
【发布时间】:2015-04-15 19:57:30
【问题描述】:

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

我想从那个 url 中抓取那个 specs 表。

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

【问题讨论】:

  • 我在这里的第一个猜测是你需要进行 ajax 调用,你可能会得到 json,这比网络抓取更容易
  • 数据表的 ajax 调用似乎是这样的 url:icecat.biz/…
  • 但是所有这些过程都是自动化的。我给你这个网址只是为了举例。我也检查了响应,但是那个规格表源会出现在那个响应中。

标签: c# web-scraping


【解决方案1】:

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

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

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

您在评论中提到抓取过程是自动化的。规格 URL 采用基本格式,您只需要产品 ID。但是,如果您没有 ID,只有一系列网址(如原始问题中的示例),则需要从您拥有的网址中获取产品 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,然后再使用HttpWebRequest 访问规范详细信息网址。

【讨论】:

  • 字符串 redirectUrl = response.GetResponseHeader("Location");位置究竟意味着什么?我的意思是我需要在那里输入什么?你能帮忙吗?
  • redirectUrl 的值将是您的示例 URL 重定向到的 URL,包含产品 ID 的 URL:icecat.biz/p/coby/dp102/… 有帮助吗?
【解决方案2】:

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

我快速浏览了链接,发现数据实际上是使用附加的 ajax 请求加载的。可以使用以下url获取ajax数据

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

使用 HtmlAgilityPack 解析该数据。

【讨论】:

    【解决方案3】:

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

    中检索 XML

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-03
      • 2022-07-26
      相关资源
      最近更新 更多