Maison  >  Article  >  cadre php  >  Thinkphp5 et QueryList implémentent la fonction de collection de pages (crawler)

Thinkphp5 et QueryList implémentent la fonction de collection de pages (crawler)

藏色散人
藏色散人avant
2020-01-28 13:57:273861parcourir

Thinkphp5 et QueryList implémentent la fonction de collection de pages (crawler)

Qu'est-ce que QueryList ?

QueryList est un ensemble d'outils PHP pour la collecte de contenu, qui utilise une approche plus moderne. Idées de développement, syntaxe simple et élégante et forte évolutivité. Par rapport à l'utilisation traditionnelle d'expressions régulières obscures pour la collection, QueryList utilise un sélecteur CSS plus puissant et plus élégant pour la collection, ce qui abaisse considérablement le seuil de collecte PHP et rend également le code de collection facile à lire et à maintenir, vous permettant de dire au revoir aux expressions régulières obscures et difficiles à maintenir.

Un ensemble complet de solutions de collecte de contenu fourni par QueryList

● Sélection de contenu DOM : sélecteur CSS

● Client HTTP Terminal : GuzzleHTTP

● Filtrage de contenu : sélecteur CSS

● Résolution des caractères tronqués : plusieurs solutions de code tronquées intégrées

● Fonctionnalités supplémentaires : plug-ins d'extension riches

Prérequis

Le projet utilise principalement le framework thinkphp5, et utilise principalement les deux fichiers `QueryList.php` et `phpQuery.php`. Nous pouvons basculer vers le répertoire du projet, créer un nouveau QL dans extend, puis exécuter la commande composer dans le répertoire QL pour installer QueryList:

composer require jaeger/querylist

puis ajouter use QLQueryList au contrôleur qui doit être utilisé ; puis écrivez le code dans le contrôleur. D'accord, ce qui suit est un exemple

//需要采集的目标页面
$page = 'http://cms.querylist.cc/news/566.html';
//采集规则
$reg = array(
   //采集文章标题
   'title' => array('h1','text'),
   //采集文章发布日期,这里用到了QueryList的过滤功能,过滤掉span标签和a标签
   'date' => array('.pt_info','text','-span -a',function($content){
       //用回调函数进一步过滤出日期
       $arr = explode(' ',$content);
       return $arr[0];
   }),
   //采集文章正文内容,利用过滤功能去掉文章中的超链接,但保留超链接的文字,并去掉版权、JS代码等无用信息
   'content' => array('.post_content','html','a -.content_copyright -script',function($content){
       //利用回调函数下载文章中的图片并替换图片路径为本地路径
       //使用本例请确保当前目录下有image文件夹,并有写入权限
       //由于QueryList是基于phpQuery的,所以可以随时随地使用phpQuery,当然在这里也可以使用正则或者其它方式达到同样的目的

       $doc=\phpQuery::newDocumentHTML($content);
       $imgs = pq($doc)->find('img');
       foreach ($imgs as $img) {
           $src = 'http://cms.querylist.cc'.pq($img)->attr('src');
           $localSrc = md5($src).'.jpg';
           $stream = file_get_contents($src);
           file_put_contents($localSrc,$stream);
           pq($img)->attr('src',$localSrc);
       }
       return $doc->htmlOuter();
   })
);
$rang = '.content';
$ql = QueryList::Query($page,$reg,$rang);
$data = $ql->getData();
//打印结果
print_r($data);

Remarque :

doit être ajouté devant lors de l'utilisation de la classe phpQuery, étant donné que l'espace de noms n'est pas utilisé dans phpQuery.php, QueryList.php ne peut pas utiliser la classe phpQuery après avoir utilisé l'espace de noms.

Pour plus de connaissances sur ThinkPHP, veuillez visiter le Tutoriel ThinkPHP !

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