Maison  >  Article  >  développement back-end  >  PHP implémente l'exploration des résultats de recherche Baidu et analyse la structure des données

PHP implémente l'exploration des résultats de recherche Baidu et analyse la structure des données

PHP中文网
PHP中文网avant
2020-09-24 18:04:036192parcourir

PHP implémente l'exploration des résultats de recherche Baidu et analyse la structure des données

Recommandé : "Tutoriel vidéo PHP"

Pratique du robot d'exploration Web PHP : explorez les résultats de recherche Baidu et analysez la structure des données

Le moteur de recherche de Baidu dispose d'un mécanisme anti-crawler. Je vais d'abord l'essayer directement avec guzzle. Le code est le suivant :

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

PHP implémente lexploration des résultats de recherche Baidu et analyse la structure des données

Baidu l'a directement intercepté et est entré dans la page de saut. Je vais essayer d'ajouter un fichier d'en-tête de navigateur et réessayer.

L'en-tête modifié est le suivant :

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

Je l'ai testé et le site s'est ouvert.

PHP implémente lexploration des résultats de recherche Baidu et analyse la structure des données

Continuons, saisissons des mots-clés et recherchons, et avons découvert qu'il avait été intercepté par la sécurité, j'ai donc senti que je ne pouvais pas le faire directement avec GuzzleHttp, alors j'ai continué avec mon artefact : jaeger /querylist et jaeger/querylist-puppeteer.

Étapes d'installation :

1. Installer les dépendances

Avant cela, vous devez activer la fonction proc_open de php, sinon l'installation complète ne peut pas être terminée

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

2. Installez nodejs

yum install nodejs

3. Installez npm

4 Installez @nesk/puphpeteer

npm install @nesk/puphpeteer

5. PHP active proc_open

Le code est comme suit :

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

$rt est mon ensemble de résultats, imprimez-le comme suit

PHP implémente lexploration des résultats de recherche Baidu et analyse la structure des données

PHP implémente lexploration des résultats de recherche Baidu et analyse la structure des données

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer