tp+php 爬虫

1 篇文章 0 订阅
1 篇文章 0 订阅

使用到:guzzle和dom-crawler
1、下载:composer require guzzlehttp/guzzle
2、下载:composer require symfony/dom-crawler

代码:


```php
<?php
require __DIR__.'/../../../vendor/autoload.php';

use GuzzleHttp\Client;
use Symfony\Component\DomCrawler\Crawler;

function Spider()
{
    //需要爬取的页面
    //$url = 'https://movie.douban.com/subject/25812712/?from=showing';
    $url = 'http://www.bwlc.net';

    //下载网页内容
    $client   = new Client([
        'timeout' => 10,
        'headers' => ['User-Agent' => 'Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)',
        ],
    ]);
    $response = $client->request('GET', $url)->getBody()->getContents();

    //进行XPath页面数据抽取
    $data    = []; //结构化数据存本数组
    $crawler = new Crawler();
    $crawler->addHtmlContent($response);

    try {
        //电影名称
        //网页结构中用css选择器用id的比较容易写xpath表达式
        $data['name'] = $crawler->filterXPath('//*[@id="content"]/h1/span[1]')->text();
        // //电影海报
        // $data['cover'] = $crawler->filterXPath('//*[@id="mainpic"]/a/img/@src')->text();
        // //导演
        // $data['director'] = $crawler->filterXPath('//*[@id="info"]/span[1]/span[2]')->text();
        // //多个导演处理成数组
        // $data['director'] = explode('/', $data['director']);
        // //过滤前后空格
        // $data['director'] = array_map('trim', $data['director']);

        // //编剧
        // $data['cover'] = $crawler->filterXPath('//*[@id="info"]/span[2]/span[2]/a')->text();
        // //主演
        // $data['mactor'] = $crawler->filterXPath('//*[@id="info"]/span[contains(@class,"actor")]/span[contains(@class,"attrs")]')->text();
        // //多个主演处理成数组
        // $data['mactor'] = explode('/', $data['mactor']);
        // //过滤前后空格
        // $data['mactor'] = array_map('trim', $data['mactor']);

        // //上映日期
        // $data['rdate'] = $crawler->filterXPath('//*[@id="info"]')->text();
        // //使用正则进行抽取
        // preg_match_all("/(\d{4})-(\d{2})-(\d{2})\(.*?\)/", $data['rdate'], $rdate); //2017-07-07(中国大陆) / 2017-06-14(安锡动画电影节) / 2017-06-30(美国)
        // $data['rdate'] = $rdate[0];
        // //简介
        // //演示使用class选择器的方式
       $pkq = $crawler->filterXPath('//div[contains(@class,"g_last")]//span')->text();
      
       $data2 = $crawler->filterXPath('//div[contains(@class,"pk10_bg")]/ul/li')->each(function(Crawler $node , $i ) use (&$data){
       		$result = $node->text();
       		
       		$data['shu'][] = $result;
       });


       $data['pkq'] = $pkq;
      

        // //演员
        // //本xpath表达式会得到多个对象结果,用each方法进行遍历
        // //each是传入的参数是一个闭包,在闭包中使用外部的变量使用use方法,并使用变量指针
        // $crawler->filterXPath('//ul[contains(@class,"celebrities-list from-subject")]/li')->each(function (Crawler $node, $i) use (&$data) {
        //     $actor['name']   = $node->filterXPath('//div[contains(@class,"info")]/span[contains(@class,"name")]/a')->text(); //名字
        //     $actor['role']   = $node->filterXPath('//div[contains(@class,"info")]/span[contains(@class,"role")]')->text(); //角色
        //     $actor['avatar'] = $node->filterXPath('//a/div[contains(@class,"avatar")]/@style')->text(); //头像
        //     //background-image: url(https://img3.doubanio.com/img/celebrity/medium/5253.jpg) 正则抽取头像图片
        //     preg_match_all("/((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+\.(jpg|jpeg|gif|png)/", $actor['avatar'], $avatar);
        //     $actor['avatar'] = $avatar[0][0];
        //     //print_r($actor);
        //     $data['actor'][] = $actor;
        // });

    } catch (\Exception $e) {

    }

    return $data;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值