搜索
首页后端开发php教程爬虫实战:用 PHP 爬取京东商品信息
爬虫实战:用 PHP 爬取京东商品信息Jun 13, 2023 am 11:11 AM
php京东爬虫

在当今的电商时代,京东作为中国最大的综合电商之一,每日上架的商品数量甚至可以达到数万种。对于广大的消费者来说,京东提供了广泛的商品选择和优势的价格优惠。但是,有些时候,我们需要批量获取京东商品信息,快速筛选、比较、分析等等。这时候,我们就需要用到爬虫技术了。在本篇文章中,我们将会介绍利用PHP语言编写爬虫,帮助我们快速爬取京东商品信息的实现。

  1. 准备工作

首先,我们需要安装php所需的curl扩展,并设置一些常用的变量。具体步骤如下:

首先,打开终端或powershell,输入以下命令来安装curl扩展包:

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

接着,我们需要在PHP的代码中设置一些简单的变量,方便我们在后续的代码中使用。比如,我们定义一个$jgname变量表示京东的访问地址,另一个$skulist变量表示每个商品的访问地址。代码如下:

$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. 获取商品列表

现在我们已经准备完了环境和需要的变量,我们可以开始编写我们的爬虫了。首先,我们需要获取目标京东商品页面的商品列表。我们可以根据,京东商品页的访问地址(即$jgname),利用curl的工具和正则表达式来获取目标链接。分别获取价格、评论数、商品名称、商品编号等等商品信息。

具体代码如下:

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

在以上代码中,我们将获取到的每个商品的链接和编号存储在了$goods‘skuid’和‘link’中,并将其它有用的信息(价格,评论数等)放入$goods数组中。最后,经由array_push()函数添加至$goodsinfo数组中。你可以使用循环语句来输出商品列表信息,便于查看爬取结果。

  1. 获取商品详细信息

现在,我们已经获取到了京东商品表页中的商品列表信息,接下来的步骤就是获取每个商品的详细信息,并将其存储在$goods数组中。我们在上一步的$goods数组中已经获取了每个商品的编号和链接。因此,接下来的操作就是打开每个链接,获取各种有用的商品信息。具体代码如下:

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

在这些代码中,我们使用了类似于第2步的技术,利用curl工具获得每个商品的详细链接,然后利用正则表达式来获取一些有用的商品信息。我们可以通过如下方式来输出获取到的商品详细信息:

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

整个流程就这些了。在实际应用中,我们可以根据实际的需求对代码进行一些调整和优化,如添加异常处理、设置请求头、调整爬取速度等。总之,在此基础上,可以构建一个稳定、高效的爬虫,获得京东商品信息,进一步助力电商运营和分析。

以上是爬虫实战:用 PHP 爬取京东商品信息的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
淘宝和京东有什么区别淘宝和京东有什么区别Aug 18, 2022 pm 05:47 PM

区别:1、淘宝网是C2C网购平台,而京东是B2C平台。2、京东采用得是价值链整合模式,淘宝则采用的是开放平台模式。3、京东采用自买自卖的模式,赚取商品中间的差价,通过低收益来获取规模化的销量;淘宝则并不参与商品的实际销售和服务,商品的销售以及服务都是由淘宝卖家直接负责的。4、京东有自己的物流平台,采用的是分布式库存管理;淘宝依赖于第三方物流平台,采用的是集约式库存管理。

京东官方旗舰店和京东自营旗舰店的区别是什么京东官方旗舰店和京东自营旗舰店的区别是什么Oct 17, 2022 pm 02:53 PM

区别:1、京东自营是京东公司自己经营的店面,从品牌厂家进货到京东仓库,然后在京东平台销售给消费者;而京东官方旗舰店是各大品牌商家借助京东平台销售自家产品。2、京东自营使用京东物流,发货快;而京东官方旗舰店则是由品牌发货。3、京东自营的产品都是储存在京东自己的仓储中心里面,而京东官方旗舰店的商品是储备于商家自己的仓库里面。4、京东自营的模式是B2B和B2C,而官方旗舰店是B2C。

京东公司全称是什么京东公司全称是什么Oct 11, 2022 pm 04:05 PM

京东公司全称是“北京京东世纪贸易有限公司”,是一家综合网络零售企业,公司旗下产业京东商城是中国电子商务领域最受消费者欢迎和最具有影响力的电子商务网站之一,拥有在线销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品、在线旅游等12大类数万个品牌商品。

京东自营和京东国际自营有什么区别京东自营和京东国际自营有什么区别Oct 17, 2022 pm 03:30 PM

区别:1、京东自营包括京东国际自营和京东国内商家。2、京东自营分为国内产品和国外产品,京东国际自营也是自营店,产品直接从海外采买。3、京东自营是京东集团很多子公司在京东商城平台上销售,而京东商城与京东国际自营也是一种合作关系;京东国际自营是京东集团子公司之一,是一家在境外注册的境外销售公司。

京东物流单号jdvc是什么业务京东物流单号jdvc是什么业务Nov 01, 2022 am 11:17 AM

jdvc是京东快递业务。京东快递是京东物流的服务之一,其主要业务是为京东商城自营的产品进行运输配送,京东商场在全国各地都有建立保税仓,将买家的订单分配到就近的仓库,再由京东快递打包运输,一至三天即可送到。京东快递除了运输商务快递,还开通了个人运输,可以通过小程序、APP、和公众号预约下单,价格比其他快递公司更便宜,大约2~3天左右即可送货上门。

京东可以用支付宝支付吗京东可以用支付宝支付吗Jul 07, 2022 am 11:37 AM

京东不可以用支付宝支付,在京东的支付界面“京东收银台”中没有“支付宝”的付款渠道,因为京东和支付宝并没有支付合作关系。京东支持的付款方式有:微信支付、云闪付、银行卡支付、货到付款、微信好友代付。

爬虫实战:用 PHP 爬取京东商品信息爬虫实战:用 PHP 爬取京东商品信息Jun 13, 2023 am 11:11 AM

在当今的电商时代,京东作为中国最大的综合电商之一,每日上架的商品数量甚至可以达到数万种。对于广大的消费者来说,京东提供了广泛的商品选择和优势的价格优惠。但是,有些时候,我们需要批量获取京东商品信息,快速筛选、比较、分析等等。这时候,我们就需要用到爬虫技术了。在本篇文章中,我们将会介绍利用PHP语言编写爬虫,帮助我们快速爬取京东商品信息的实现。准备工作首先,我

京东在线配镜流程京东在线配镜流程Nov 08, 2023 pm 03:19 PM

京东在线配镜流程是:1、挑选镜架;2、挑选镜片;3、定制镜片;4、确认订单;5、支付订单;6、等待配送;7、验货与试戴;8、确认收货。在配镜前最好先去医院或专业的眼镜店进行验光,了解自己的近视度数和瞳距等信息,以便选择合适的镜片参数。京东的配镜服务可能会有所不同,具体流程和价格等信息可以在其官方网站上查询。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境