Heim  >  Artikel  >  Backend-Entwicklung  >  Praktischer Crawler-Kampf: Verwenden Sie PHP, um die Produktinformationen von JD.com zu crawlen

Praktischer Crawler-Kampf: Verwenden Sie PHP, um die Produktinformationen von JD.com zu crawlen

PHPz
PHPzOriginal
2023-06-13 11:11:192087Durchsuche

Im heutigen E-Commerce-Zeitalter kann JD.com als eines der größten umfassenden E-Commerce-Unternehmen Chinas sogar täglich Zehntausende Produkte in seine Regale stellen. Für die Mehrheit der Verbraucher bietet JD.com eine große Auswahl an Produkten und vorteilhafte Preisnachlässe. Manchmal müssen wir jedoch JD-Produktinformationen stapelweise abrufen, schnell überprüfen, vergleichen, analysieren usw. Zu diesem Zeitpunkt müssen wir Crawler-Technologie verwenden. In diesem Artikel stellen wir die Implementierung der Verwendung der PHP-Sprache zum Schreiben eines Crawlers vor, der uns beim schnellen Crawlen von JD.com-Produktinformationen unterstützt.

  1. Vorbereitung

Zuerst müssen wir die für PHP erforderliche Curl-Erweiterung installieren und einige häufig verwendete Variablen festlegen. Die spezifischen Schritte sind wie folgt:

Öffnen Sie zunächst das Terminal oder die Powershell und geben Sie den folgenden Befehl ein, um das Curl-Erweiterungspaket zu installieren:

sudo apt-get install php7.0-curl //ubuntu系统安装
brew install curl-openssl php-curl //macOS系统安装

Als nächstes müssen wir einige einfache Variablen im PHP-Code festlegen, damit wir ihn verwenden können im nachfolgenden Code. Beispielsweise definieren wir eine Variable „$jgname“, um die Zugriffsadresse von JD.com darzustellen, und eine weitere Variable „$skulist“, um die Zugriffsadresse jedes Produkts darzustellen. Der Code lautet wie folgt:

$jgname= "https://list.jd.com/list.html?cat=1318,1486,1490&ev=exbrand_13910&sort=sort_rank_asc&trans=1&JL=3_%E5%93%81%E7%89%8C_%E5%B0%8F%E7%B1%B3%EF%BC%88MI%EF%BC%89#J_crumbsBar";
$skulist="https://item.jd.com/1285310.html";
  1. Holen Sie sich die Produktliste

Da wir nun die Umgebung und die erforderlichen Variablen vorbereitet haben, können wir mit dem Schreiben unseres Crawlers beginnen. Zuerst müssen wir die Produktliste der Ziel-JD-Produktseite abrufen. Wir können Curl-Tools und reguläre Ausdrücke verwenden, um den Ziellink basierend auf der Zugriffsadresse der JD.com-Produktseite (d. h. $jgname) zu erhalten. Erhalten Sie Produktinformationen wie Preis, Anzahl der Bewertungen, Produktname, Produktnummer usw.

Der spezifische Code lautet wie folgt:

$ch = curl_init();//初始化curl

curl_setopt($ch, CURLOPT_URL,$jgname);//设置url属性
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//设置是否将curl_exec()获取的信息以字符串返回,而不是直接输出
$result = curl_exec ($ch);//执行一个curl会话
curl_close ($ch);//关闭curl会话

preg_match_all("/<li .*?</li>/", $result, $matches);//正则表达式把需要的内容取出来,即匹配<li>标签

$goodsinfo=array();//创建一个商品列表

foreach ($matches[0] as $item) {
    //获取商品信息
    preg_match("/sku="(d+)"/",$item,$skuid);
    preg_match("/标题">s{0,}([dD]+?)s{0,}</a>/",$item,$titlename);
    preg_match("/<strong>¥</strong>[s
]{0,}<i>(d+.d+)</i>/",$item,$price);
    preg_match("/<divs{0,}class="p-commit">[s
]+<strong[^>]+>(d+)/",$item,$commentnum);
    preg_match("/<as{0,}href="([dD]+?)"/",$item,$link);

    //将商品信息存储到商品列表中
    $goods=array(
         "title"=>trim($titlename[1]),
         "price"=>trim($price[1]),
         "link"=>"https:".$link[1],
         "skuid"=>trim($skuid[1]),
         "commentnum"=>trim($commentnum[1])
    );
    array_push($goodsinfo,$goods);//将商品信息添加到商品列表

    //输出测试:打印商品信息
    echo $goods['title']." ".$goods['price']." ".$goods['commentnum']." ".$goods['link']."<br>";
}

Im obigen Code speichern wir den Link und die Nummer jedes erhaltenen Produkts in $goods'skuid' und 'link' und fügen weitere nützliche Informationen hinzu (Preis, Kommentarnummer usw.). .) in das $goods-Array. Schließlich wird es über die Funktion array_push() zum Array $goodsinfo hinzugefügt. Sie können Schleifenanweisungen verwenden, um Produktlisteninformationen auszugeben und so die Crawling-Ergebnisse einfacher anzuzeigen.

  1. Produktdetails abrufen

Jetzt haben wir die Produktlisteninformationen auf der JD-Produkttabellenseite erhalten. Der nächste Schritt besteht darin, die detaillierten Informationen zu jedem Produkt abzurufen und sie im $goods-Array zu speichern. Im vorherigen Schritt haben wir die Nummer und den Link jedes Produkts im Array $goods ermittelt. Daher besteht der nächste Schritt darin, jeden Link zu öffnen, um verschiedene nützliche Produktinformationen zu erhalten. Der spezifische Code lautet wie folgt:

foreach ($goodsinfo as &$goods) {
    //更新每个商品的网页链接
    $link="https://item.jd.com/".$goods['skuid'].".html";
    $goods['link']=$link;

    $canBuy=true;//官网上可以买
    //判断是否能够购买
    preg_match('/无货/',file_get_contents($link)) && ($canBuy=false);

    //利用curl工具打开网页链接,获得网页代码
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$link);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $html = curl_exec ($ch);
    curl_close ($ch);
    //分析网页代码,使用正则表达式获取商品种类,价格,颜色,库存数量等数据,并保存
    preg_match_all('/<divs{0,}class="Ptable".*?>[s
]+<divs{0,}class="Ptable-item".*?>[s
]+([dD]*?)</div>/',$html,$items);
    preg_match_all('/<strong>商品名称</strong><em>(d.*)</em>/',$html,$item);
    $goods['title']=$item[1][0];
    echo $goods['title'];

    if($canBuy)
    {
        foreach ($items[1] as &$item) {
            //去掉html标记、空格、换行符
            $item=strip_tags($item);
            $item=str_replace(" ","",$item); 
            $item=str_replace("    ","",$item); 
            $item=str_replace("
","",$item);
            $item=str_replace("
","",$item); 

            //切割字符串,获取键值对
            preg_match_all('/([dD]*?):([dD]*?)[
]/',$item,$item2);
            if(count($item2[1])>0){
                for($i=0;$i<count($item2[1]);$i++){
                    if($item2[1][$i]=="价格"){
                        $goods['price']=$item2[2][$i];
                    }elseif($item2[1][$i]=="颜色"){
                        $goods['color']=$item2[2][$i];
                    }elseif($item2[1][$i]=="产地"){
                        $goods['producePlace']=$item2[2][$i];
                    }elseif($item2[1][$i]=="商品编号"){
                        $goods['goodsn']=$item2[2][$i];
                    }elseif($item2[1][$i]=="型号"){
                        $goods['model']=$item2[2][$i];
                    }elseif($item2[1][$i]=="商品毛重"){
                        $goods['grossWeight']=$item2[2][$i];
                    }elseif($item2[1][$i]=="规格"){
                        $goods['specifications']=$item2[2][$i];
                    }
                }
            }
        }
        //获取商品评论数
        preg_match_all('/<as{0,}href="#comment"s{0,}target="_self">s{0,}[dD]+?<strongs{0,}class="curr-num">(d*)</',$html,$comment);
        $goods['commentnum']=$comment[1][0];
    }
}

In diesen Codes verwenden wir eine Technik ähnlich der in Schritt 2, wobei wir das Curl-Tool verwenden, um den detaillierten Link jedes Produkts zu erhalten, und dann reguläre Ausdrücke verwenden, um einige nützliche Produktinformationen zu erhalten. Die erhaltenen Produktdetails können wir wie folgt ausgeben:

foreach ($goodsinfo as &$goods) {
    echo $goods['skuid']." ".$goods['title']." ".$goods['price']." ".$goods['commentnum']." ".$goods['link']."<br>";
}

Das war's für den gesamten Prozess. In tatsächlichen Anwendungen können wir basierend auf den tatsächlichen Anforderungen einige Anpassungen und Optimierungen am Code vornehmen, z. B. das Hinzufügen einer Ausnahmebehandlung, das Festlegen von Anforderungsheadern, das Anpassen der Crawling-Geschwindigkeit usw. Kurz gesagt, auf dieser Grundlage kann ein stabiler und effizienter Crawler aufgebaut werden, um JD-Produktinformationen zu erhalten und E-Commerce-Vorgänge und -Analysen weiter zu unterstützen.

Das obige ist der detaillierte Inhalt vonPraktischer Crawler-Kampf: Verwenden Sie PHP, um die Produktinformationen von JD.com zu crawlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn