PHP实现抓取百度搜索结果,并分析数据结构

PHP实现抓取百度搜索结果,并分析数据结构

PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构

百度的搜索引擎有反爬虫机制,我先直接用guzzle试试水。代码如下:

<?php
/**
 * Created by Benjiemin
 * Date: 2020/3/5
 * Time: 14:58
 */
require ('./vendor/autoload.php');
use QL\\QueryList;
//进入网页
$jar = new \\GuzzleHttp\\Cookie\\CookieJar;
$client = new GuzzleHttp\\Client(['cookies' => true]);
$ql = $client->request('GET', 'https://www.baidu.com', [
    'cookies' => $jar
]);
if($ql->getStatusCode()!=200){
    echo '网站状态不正常';die;
}
echo  $ql->getBody();

6b0d42b0ac5af250f8026e0f3ff8423.png

百度直接拦截了,进了跳转页面,我试试加个浏览器头文件,再试试。

修改后的header如下:

$ql = $client->request('GET', 'https://www.baidu.com', [
    'cookies' => $jar,
    'headers' => [
    'Accept-Encoding' => 'gzip, deflate, br',
    'Accept'     => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Language'      => 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control'      => 'no-cache',
    'Connection'      => 'keep-alive',
    'User-Agent'      => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
]
]);

我测试了下,网站打开了。

8e377d524c553551086d93d9f40c90b.png

我们继续,输入关键词,并搜索,结果发现被安全拦截了,所以我感觉直接用GuzzleHttp搞不动,于是我继续我的神器:jaeger/querylist和jaeger/querylist-puppeteer。

安装步骤:

1.安装依赖

在这之前,要先启用php的proc_open函数,否则无法安装完整

composer install jaeger/querylist
composer install jaeger/querylist-puppeteer

2.安装nodejs

yum install nodejs

3.安装npm

4.安装@nesk/puphpeteer

npm install @nesk/puphpeteer

5.PHP启用proc_open

代码如下:

<?php
/**
 * Created by Benjiemin
 * Date: 2020/3/5
 * Time: 14:58
 */
require ('./vendor/autoload.php');
use QL\\QueryList;
use QL\\Ext\\Chrome;
$ql = QueryList::getInstance();
// 注册插件,默认注册的方法名为: chrome
$ql->use(Chrome::class);
 $ql->chrome(function ($page,$browser) {
    $page->goto('https://www.baidu.com');
    // 这里故意设置一个很长的延长时间,让你可以看到chrome浏览器的启动
    sleep(3);
    //输入关键词
    $wd = '简庆旺博客';
    $page->type("input[id='kw']",$wd);
    sleep(1);
    //点击搜索
    $page->click("input[type='submit']");
    //等待搜索结果
    sleep(3);
    //获取结果
    $html = $page->content();
    //用jquery选择器抽取结果
    $rules = array(
        'title'=>['#content_left h3 a','text'],//标题
        'url'=>['#content_left h3 a','href'],//跳转网址
        'description'=>['div .c-abstract','text'],//描述
    );
    $ql = QueryList::html($html);
    $rt = $ql->rules($rules)->query()->getData();
    //如果有需要,可以把$rt入库,以及做其他操作
    sleep(10);
    $browser->close();
    // 返回值一定要是页面的HTML内容
    return $html;
},[
    'headless' => false, // 启动可视化Chrome浏览器,方便调试
    'devtools' => false, // 打开浏览器的开发者工具
])->find('title')->text();

$rt是我的结果集合,打印下,如下

b8484929df81399679d8932930690fd.png

57c970e6dcf42d1a286ea23682e0591.png

关于PHP实现抓取百度搜索结果,并分析数据结构的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/41181.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月20日 22:50
下一篇 2022年6月20日 22:51

相关推荐

  • 通过PHP内置web服务器实现简单的调试应用

    # 在自己家目录下创建www目录 [root@localhost ~]# mkdir www [root@localhost ~]# cd www/ # 创建几个php脚本用于测试 index.php info.php # 启动一个Web服务器 [root@localhost www]# php -S 192.168.204.151:800…

    2022年6月25日 PHP自学教程
    0177
  • 微信小程序中PHP开发的常用类库介绍。

    随着移动互联网的不断发展,各类App的使用越来越普遍,规模也越来越大。微信小程序作为一种新兴的应用形态,受到越来越多开发者的青睐。而PHP开发的小程序也成为了一种趋势。在这种趋势下,PHP常用类库的使用也变得…

    2023年6月3日
    08
  • PHP之钩子

    PHP 提供的钩子PHP 和 Zend Engine 为扩展提供了许多不同的钩子,这些扩展允许扩展开发人员以 PHP userland 无法提供的方式控制 PHP 运行时。本章将展示各种钩子和从扩展钩子到它们的常见用例。钩子到 PHP 功能的一…

    2022年6月13日
    0153
  • 总结PHP字符串与数组处理函数用法

    本文实例讲述了PHP字符串与数组处理函数用法。分享给大家供大家参考,具体如下:字符串处理函数trim --去除字符串首尾的多余空白字符和其他字符函数结构:string trim ( string $str [, string $character_mask = &…

    2022年6月16日
    0152
  • 如何在PHP中进行Cookie操作。

    在Web开发中,Cookie经常被用来记录用户的状态和跟踪用户的行为。Cookie是存储在用户浏览器上的一些数据,可以方便地在浏览器和服务器之间传递。在PHP中,操作Cookie非常简单,本文将通过以下几个方面介绍如何在PHP…

    2023年5月23日
    03
  • 如何在PHP中实现验证码。

    随着互联网的不断发展,越来越多的网站需要使用验证码来保证安全性。验证码是一种借助人类能力而无法被计算机破解的认证技术,广泛应用于网站注册、登录、找回密码等功能中。下面将介绍如何使用PHP实现验证码功能。…

    2023年5月22日
    06
  • PHP上传问题的后续问题

    如何验证文件类型 验证文件括展名 验证文件MIME类型 保证上传文件命名的唯一性 时间 时间戳 IP 将上传功能进行封装 如何上传多文件 html文件: 测试代码: 运行结果: $FILE: 第一个[]:文件框名称 第二个[]:属性 第…

    2017年11月8日 PHP自学教程
    0216
  • 如何使用PHP开发商城的限时折扣功能。

    随着电子商务的迅猛发展,在线商城已经成为了人们购物的主要途径之一。要想在市场上占有一席之地,一个好的商城必须提供多种优惠活动来吸引消费者。其中,限时折扣是一种受欢迎且有效的促销方式。本文将着重介绍如…

    2023年5月30日
    03

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息