Blogger Information
Blog 49
fans 1
comment 0
visits 44854
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
用正则表达式,抓取京东商城的列表。(用三个表达式抓取到了商品库ID,商品名称,商品图片;用PHP嵌入HTML做了一个点击查询数据库数据的页面)2019年6月28日20点
Nick的博客
Original
1102 people have browsed it

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

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!