Maison > développement back-end > tutoriel php > 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中文网
Libérer: 2023-04-09 15:28:01
avant
6344 Les gens l'ont consulté

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();
Copier après la connexion

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;,
]
]);
Copier après la connexion

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
Copier après la connexion

2. Installez nodejs

yum install nodejs
Copier après la connexion

3. Installez npm

4 Installez @nesk/puphpeteer

npm install @nesk/puphpeteer
Copier après la connexion

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();
Copier après la connexion

$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!

Étiquettes associées:
php
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal