宜家com产品刮刀

问题描述 投票:0回答:1

我想制作一个简单的ikea com产品页面刮刀。这是我得到的

function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    return curl_exec($ch);
    curl_close($ch);
}
function get_product() {
    $product_id ='702.642.81';
    $prod_id = preg_replace('/\./', '', $product_id); 
    $domain = 'http://www.ikea.com/ru/ru/catalog/products/'.$prod_id.'/?type=xml&dataset=normal,allImages,prices,attributes';
    $html = curl($domain);
    $xml = simplexml_load_string($html);
    print_r($xml);
}

这似乎有效。这是get_product()结果的片段

[products] => SimpleXMLElement Object
    (
        [product] => SimpleXMLElement Object
            (
                [URL] => /ru/ru/catalog/products/P70264281/
                [browseable] => true
                [partNumber] => P70264281
                [name] => ЛЕРХАМН 
                [nameswe] => SimpleXMLElement Object

但有一些产品(产品ID)给出了空洞的回应

[products] => SimpleXMLElement Object
    (
    )

产品编号为090.071.63。此产品页面的原始链接(在ikea com上)在产品ID products/*S*09007163之前包含“S”。所以我尝试在$domainand添加“S”前缀它没有帮助

但如果我将关注此链接http://www.ikea.com/ru/ru/catalog/products/S09007163/?type=xml&dataset=normal,allImages,prices,attributes它向我显示产品数据。

问题是什么?也许有人在此之前就遇到过

php curl web-scraping
1个回答
0
投票

我正在做同样的事情,但使用AutoIT3结合JQXidel作为我的工具链。

我的方法是:

  • 为“所有产品”抓取IKEAs页面并获取包含“类别”的链接。这是例如床,灯,......
  • 对于每个类别,获取产品页面的链接。这些也很容易找到,因为它们有一定的等级并以宜家号码结尾
  • 最后,对于每个产品(我有大约200个类别页面,大约15200个产品。可能已经错过了一些,但现在还可以),下载产品页面。它有一个大的JSON块,它包含产品的所有内容。我可以根据需要从这里提取数据,例如手册,图像......

所以基本上我自上而下地工作,在本地保存每个列表,以避免向宜家发送太多流量。

最后一步是处理图像和手册。

一些说明:

  • 您可以使用您指定的语言获取JSON,例如ikea.com/da/dk或/ ru / ru
  • URL整齐有序地组织在一个很好的层次结构中
  • 环顾javascript文件,它们包含许多来自宜家的开发人员的评论。有趣的是在窗帘后面看一眼。
© www.soinside.com 2019 - 2024. All rights reserved.