ホームページ >PHPフレームワーク >ThinkPHP >Thinkphp5とQueryListはページ収集機能(クローラ)を実装しています

Thinkphp5とQueryListはページ収集機能(クローラ)を実装しています

藏色散人
藏色散人転載
2020-01-28 13:57:273923ブラウズ

Thinkphp5とQueryListはページ収集機能(クローラ)を実装しています

QueryList とは何ですか?

QueryList はコンテンツ収集用の PHP ツールのセットで、より最新の開発アイデア、シンプルでエレガントな構文、強力な拡張性。コレクション用のあいまいな正規表現の従来の使用と比較して、QueryList はコレクション用により強力でエレガントな CSS セレクターを使用します。これにより、PHP コレクションのしきい値が大幅に低くなり、また、コレクション コードが読みやすく、保守しやすくなり、コレクションのコードに別れを告げることができます。わかりにくく保守が難しい正規表現を使用します。

QueryList はコンテンツ収集ソリューションの完全なセットを提供します

● DOM コンテンツ選択: CSS セレクター

● HTTP クライアント ターミナル: GuzzleHTTP

##● コンテンツ フィルタリング: CSS セレクター

##● 文字化けの解決: 複数のコード化けソリューションを内蔵

##● 追加機能: 豊富な拡張プラグイン

前提

プロジェクトでは主に thinkphp5 フレームワークを使用し、主に `QueryList.php` と `phpQuery.php` の 2 つのファイルを使用します。プロジェクト ディレクトリに切り替え、extend で新しい QL を作成し、QL ディレクトリでコンポーザー コマンドを実行して QueryList をインストールします。

composer require jaeger/querylist

次に、使用する必要があるコントローラーに use QL\QueryList を追加します。 ; そしてコントローラ内 コードが記述されました。以下は例です

//需要采集的目标页面
$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);

注:

\ で phpQuery クラスを使用する場合は、先頭に追加する必要があります。これは、phpQuery.php では名前空間が使用されていないためです。これは、名前空間を使用した後、QueryList.php で phpQuery クラスを使用できないためです。

関連する ThinkPHP の知識については、

ThinkPHP チュートリアル

をご覧ください。

以上がThinkphp5とQueryListはページ収集機能(クローラ)を実装していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。