【问题标题】:Listing items from a e-commerce site列出来自电子商务网站的商品
【发布时间】:2014-12-20 03:24:01
【问题描述】:

我正在编写一个 php 脚本,它从电子商务网站获取所有产品 URL,现在我只是使用函数 get_file_contents() 并且在使用 preg_match_all() 搜索关键字之后预计项目 url,现在,我的问题是,我可以使用更直接和有效的方式来存储来自网站的所有这些链接并将它们放入我的数据库中吗?

【问题讨论】:

    标签: php database indexing e-commerce


    【解决方案1】:

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

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

    这是我使用的示例解析器代码。我希望它能帮助您完成整个过程:

    $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;
    }
    }
    

    【讨论】:

    • 基本上是我在做的,但是我在列出url之后存储信息,因为产品页面通常比结果页面更标准,我必须列出几个网络商店
    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2010-09-27
    • 2011-06-11
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多