Rumah > pembangunan bahagian belakang > tutorial php > Pertempuran crawler praktikal: Gunakan PHP untuk merangkak maklumat produk JD.com

Pertempuran crawler praktikal: Gunakan PHP untuk merangkak maklumat produk JD.com

PHPz
Lepaskan: 2023-06-13 11:12:02
asal
2129 orang telah melayarinya

Dalam era e-dagang hari ini, JD.com, sebagai salah satu syarikat e-dagang komprehensif terbesar di China, malah boleh meletakkan berpuluh-puluh ribu produk di raknya setiap hari. Bagi majoriti pengguna, JD.com menyediakan pelbagai pilihan produk dan konsesi harga yang berfaedah. Walau bagaimanapun, kadangkala, kita perlu mendapatkan maklumat produk JD secara berkelompok, menyaring dengan cepat, membandingkan, menganalisis, dsb. Pada masa ini, kita perlu menggunakan teknologi crawler. Dalam artikel ini, kami akan memperkenalkan pelaksanaan menggunakan bahasa PHP untuk menulis perangkak untuk membantu kami merangkak maklumat produk JD.com dengan cepat.

  1. Persediaan

Pertama, kita perlu memasang sambungan curl yang diperlukan oleh PHP dan menetapkan beberapa pembolehubah yang biasa digunakan. Langkah-langkah khusus adalah seperti berikut:

Pertama, buka terminal atau powershell dan masukkan arahan berikut untuk memasang pakej sambungan curl:

sudo apt-get install php7.0-curl //ubuntu系统安装
Salin selepas log masuk
rrree

Seterusnya, kita perlu menetapkan beberapa pembolehubah mudah dalam Kod PHP untuk memudahkan kami digunakan dalam kod berikutnya. Sebagai contoh, kami mentakrifkan pembolehubah $jgname untuk mewakili alamat akses JD.com, dan pembolehubah $skulist lain untuk mewakili alamat akses setiap produk. Kodnya adalah seperti berikut:

brew install curl-openssl php-curl //macOS系统安装
Salin selepas log masuk
  1. Dapatkan senarai produk

Sekarang kami telah menyediakan persekitaran dan pembolehubah yang diperlukan, kami boleh mula menulis perangkak kami. Pertama, kita perlu mendapatkan senarai produk halaman produk JD sasaran. Kita boleh menggunakan alat curl dan ungkapan biasa untuk mendapatkan pautan sasaran berdasarkan alamat akses halaman produk JD (iaitu $jgname). Dapatkan maklumat produk seperti harga, bilangan ulasan, nama produk, nombor produk, dsb.

Kod khusus adalah seperti berikut:

$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";
Salin selepas log masuk

Dalam kod di atas, kami menyimpan pautan dan nombor setiap produk yang diperolehi dalam $goods'skuid' dan 'link', dan Maklumat berguna lain (harga, bilangan ulasan, dll.) diletakkan dalam tatasusunan $barang. Akhir sekali, ia ditambah kepada tatasusunan $goodsinfo melalui fungsi array_push(). Anda boleh menggunakan penyataan gelung untuk mengeluarkan maklumat senarai produk untuk melihat hasil merangkak dengan mudah.

  1. Dapatkan butiran produk

Sekarang kami telah memperoleh maklumat senarai produk di halaman senarai produk JD, langkah seterusnya ialah mendapatkan maklumat terperinci setiap produk , dan simpan dalam susunan $goods. Kami telah memperoleh nombor dan pautan setiap produk dalam tatasusunan $goods dalam langkah sebelumnya. Oleh itu, langkah seterusnya ialah membuka setiap pautan untuk mendapatkan pelbagai maklumat produk yang berguna. Kod khusus adalah seperti berikut:

$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>";
}
Salin selepas log masuk

Dalam kod ini, kami menggunakan teknik yang serupa dengan langkah 2, menggunakan alat curl untuk mendapatkan pautan terperinci setiap produk, dan kemudian menggunakan ungkapan biasa untuk mendapatkan beberapa produk yang berguna maklumat . Kami boleh mengeluarkan butiran produk yang diperoleh dengan cara berikut:

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];
    }
}
Salin selepas log masuk

Itu sahaja untuk keseluruhan proses. Dalam aplikasi sebenar, kami boleh membuat beberapa pelarasan dan pengoptimuman pada kod berdasarkan keperluan sebenar, seperti menambah pengendalian pengecualian, menetapkan pengepala permintaan, melaraskan kelajuan merangkak, dsb. Ringkasnya, atas dasar ini, perangkak yang stabil dan cekap boleh dibina untuk mendapatkan maklumat produk JD dan seterusnya membantu operasi dan analisis e-dagang.

Atas ialah kandungan terperinci Pertempuran crawler praktikal: Gunakan PHP untuk merangkak maklumat produk JD.com. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan