列出电子商务网站的项目

时间:2014-10-24 09:39:17

标签: php database indexing e-commerce

我正在处理php中的脚本,该脚本从电子商务网站获取所有产品网址,现在我只使用函数get_file_contents()并在搜索关键字后使用预期项目网址的preg_match_all(),现在,我的问题是,我可以使用更直接,更有效的方式从网站存储所有这些链接并将它们放在我的数据库中吗?

1 个答案:

答案 0 :(得分:0)

我最近为我的客户的项目创建了一个抓取系统。基本上这些是我遵循的步骤:

  1. Project基于PHP,它支持多种类型的文档,如xml,json和html。
  2. 我已创建了一个基本产品对象,其中包含我需要的属性(标题,图片,价格,链接,类别,来源网站)
  3. 对于每个网站,我使用的解析器通常使用带有DomXpath的PhpDom库。
  4. 基本上,我找到产品列表标签,并循环记录并创建一个新产品列表对象,其中包含产品对象(步骤2)。
  5. 解析网站完成后,我将整个列表发送到我的基本操作,它会检查具有该网址的产品是否已经存在,如果它没有添加到数据库。
  6. 同样在我的服务器中,我运行一个cron来检查所有产品链接,如果响应返回404或500,它会向产品添加一个标志1.我还运行另一个cron使用标志1再次检查链接。如果它仍然响应错误代码,它将从我的数据库中删除内容。
  7. 这是我使用的示例解析器代码。我希望它能帮助你完成整个过程:

    $content = file_get_contents($url);
    libxml_use_internal_errors(true);
    $oDom = new DomDocument;
    $oDom->validateOnParse = false;
    $res = $oDom->loadHTML($content);
    libxml_clear_errors();
    $oDom->preserveWhiteSpace = false;
    $oXpath = new DOMXPath($oDom);
    $productNode = $oXpath->query('//div[@class="ulist span4"]');
    if($productNode){
        $productsList = array();
        foreach($productNode as $p){
            $this->oProduct = new Products();
    
        $productURL = $oXpath->query('div[@class="ures"]/div[@class="ures-cell"]/a', $p)->item(0);
        $this->oProduct->url = $this->base.'/'.$productURL->getAttribute('href');
        $this->oProduct->category = $categoryID;
        $this->oProduct->productPeek = $peek;
        $titleNode = $oXpath->query('div[@class="ubilgialan span12"]/div[@class="span12 uadi"]/a/span', $p)->item(0);               
        $this->oProduct->title = trim($titleNode->nodeValue);                   
        $priceNode = $oXpath->query('div[@class="ubilgialan span12"]/div[@class="span8 ufytalan"]/div[@class="ufyt"]/span[@class="divdiscountprice"]/span', $p)->item(0);
        $this->oProduct->price = trim($priceNode->nodeValue);
        $imageNode = $oXpath->query('div[@class="ures"]/div[@class="ures-cell"]/a/img', $p)->item(0); 
        $this->oProduct->image = $this->base."/".$imageNode->getAttribute('src');
        $productsList[] = $this->oProduct;
    }
    
    if(count($productsList) > 0){
        return $productsList;
    }
    }