列出电子商务网站上的商品


Listing items from a e-commerce site

我正在php中编写一个脚本,该脚本从电子商务网站获取所有产品的url,目前我只使用函数get_file_contents(),在用preg_match_all()搜索预测商品url的关键字后,现在我的问题是,我能用一种更直接、更有效的方式存储网站上的所有链接并将它们放在我的数据库中吗?

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

  1. 该项目基于PHP,支持多种类型的文档,如xml、json和html
  2. 我已经创建了一个基本产品对象,其中包含我需要的属性(标题、图像、价格、链接、类别、源站点)
  3. 对于每个网站,我都使用一个解析器,它通常使用带有DomXpath的PhpDom库
  4. 基本上,我找到了productlisting标签,并循环浏览记录,创建了一个新的productlist对象,其中包含products对象(步骤2)
  5. 当解析网站完成时,我会将整个列表发送到我的基本操作,它会检查具有该url的产品是否已经存在,如果不存在,它会添加到数据库中
  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;
}
}