博客列表 >用正则表达式,抓取京东商城的列表。(用三个表达式抓取到了商品库ID,商品名称,商品图片;用PHP嵌入HTML做了一个点击查询数据库数据的页面)2019年6月28日20点

用正则表达式,抓取京东商城的列表。(用三个表达式抓取到了商品库ID,商品名称,商品图片;用PHP嵌入HTML做了一个点击查询数据库数据的页面)2019年6月28日20点

Nick的博客
Nick的博客原创
2019年07月06日 00:15:101109浏览

jd.php是抓取京东商城商品的代码,抓取后将数组绑定到数据库字段名后,利用公用库方法把数据添加到数据库中


jd.php:

实例

<?php
require __DIR__ . '\function.php';
//抓取数据地址
$url = 'https://list.jd.com/list.html?cat=670,671,672&page=1';
//利用curl_data函数获取网页上的所有元素
$jd = curl_data($url);
//测试获取数据
//var_dump($data);
//抓取数据数量
//$number = 10;

//$pattern: 要搜索的模式,字符串形式。
//$subject: 输入字符串。
//$matches: 多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。

//京东的商品详情在<li class="gl-item"></li>内,其中抓取的数据在<i class="promo-words"></i>内,里面的内有有商品图片,商品名称等信息
//  /si匹配非白的内容,不区分大小写
$pattern = '/<li class="gl-item">(.*?)<i class="promo-words">/si';
//按照设定好的$pattern进行匹配
$commodity = preg_match_all($pattern,$jd,$matches);
////在页面中输出匹配结果
//var_dump($matches);

//替换抓取后的html标签内的图片href属性
$data = preg_replace('/data-lazy-img/','src',$matches[0]);
//将替换后的结果输出在页面中
//var_dump($data);

//利用变量保存匹配所需内容的规则
//设置匹配文字内容的正则表达式
$patternText ='/(<em>)(.*?)<\/em>/si';
//设置匹配图片链接的正则表达式
$patternImages = '/<img.*src="(.+)"/i';
//设置匹配京东商品库对应的商品ID的正则表达式
$patternID = '/data-sku="(.*?)"/i';
//设置匹配商品对应价格的正则表达式
//$patternPrice = '/class="J_price">(<em><i>)(.*?)<\/i>/';

//用foreach()遍历抓取数据的数组
foreach ($data as $value){
    $commodityText = preg_match_all($patternText,$value,$data_text);
    $commodityImages = preg_match_all($patternImages,$value,$data_images);
    $commodityId = preg_match_all($patternID,$value,$data_id);

    //商品价格在网页源码中不显示,因此抓取不到商品价格
    //  $commodityPrice = preg_match_all($patternPrice,$value,$data_price);
   //   print_r($data_price);
    $text = trim($data_text[2][2]);
    $images = trim($data_images[1][0]);
    $id = trim($data_id[1][0]);
//    $price = trim($data_price);

    //用变量保存数组,并把处理好的数据绑定到数组中
    $sqlData = [
        'name'   => $text,
        'kuid'     => $id,
        'images' => $images
//        'price'  => $price
    ];
    //测试抓取数据组成的数组
    print_r($sqlData);

    //调用function中的数据新增方法insert(),把抓取到的数据添加到数据库中
    insert('jd',$sqlData);

}

运行实例 »

点击 "运行实例" 按钮查看在线实例


测试数组数据,打印到页面中显示:

抓取数据打印.png


将数据添加到数据库后,数据库的jd表:

数据库信息.png


用前端页面显示数据库查询的结果,showspider.php(本来想做js遍历数据库数据的,没研究出来):

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="static/css/bootstrap.min.css">
    <title>京东爬虫抓取页面</title>
</head>
<body>
<div class="form-group has-success col-xs-6 col-xs-offset-3">

    <h3 style="margin-left: auto">京东商品数据抓取</h3>
    <br>
    <button id="spider" class="btn-success btn-lg">点击查看抓取到的数据</button>
<!--    <button id="spider" class="btn-success btn-lg" onclick="arr.forEach(getData())">抓取显示</button>-->

    <ul id="data" style="display: none">
        <?php
        require __DIR__ . '/static/function.PHP';
        //查询数据库数据
        $sqlData = select('jd', 'kuid,name,images');

        //用foreach()遍历数据库抓取到的数据
        foreach ($sqlData as $data) {
        $kuid = "<li>京东商品库ID => {$data['kuid']}</li>";
        $name = "<li>京东商品名称 => {$data['name']}</li>";
        $images = "<li>京东商品图片 => <img src=\"{$data['images']}\"></li>";
        echo $kuid . '<br>' . $name . '<br>' . $images . '<hr style="border-top:10px groove skyblue">';
        }
        ?>
    </ul>

<script>
    //获取按钮
    var btn = document.getElementById('spider');
    // //获取输入的商品地址
    // var url = document.getElementsByTagName('input').item(0);
    //获取页面中的ul
    var ul = document.getElementsByTagName('ul').item(0);

    //监听按钮点击
    btn.addEventListener('click',getData,false);
    //创建点击事件
    function getData() {
        // console.log(ul);
        // 将ul列表显示出来
        ul.style.display = 'block';

        //var li = document.getElementsByTagName('li');
        //var arr = [
        //    '<?php
        //    require __DIR__ . '/static/function.PHP';
        //    //查询数据库数据
        //    $sqlData = select('jd','kuid');
        //    //用foreach()遍历数据库抓取到的数据
        //    foreach ($sqlData as $data){
        //        return $data['kuid'];
        //    }
        //    ?>//',
        //    '<?php
        //        require __DIR__ . '/static/function.PHP';
        //        //查询数据库数据
        //        $sqlData = select('jd','name');
        //        //用foreach()遍历数据库抓取到的数据
        //        foreach ($sqlData as $data){
        //            return $data['name'];
        //        }
        //        ?>//',
        //    '<?php
        //        require __DIR__ . '/static/function.PHP';
        //        //查询数据库数据
        //        $sqlData = select('jd','images');
        //        //用foreach()遍历数据库抓取到的数据
        //        foreach ($sqlData as $data){
        //            return "<img src=\"{$data['images']}\">";
        //        }
        //        ?>//'
        //];
        //var k = ['京东商品库ID =>','京东商品名称 =>','京东商品图片 =>'];
        //
        //li.innerText = li.innerText + k + arr;

    }
</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


未点击的按钮的页面:

显示数据库数据页面.png


最终点击按钮后的显示效果:

显示数据库数据.png

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议