惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

龙辉's Blog - 敲代码

对学某通的登录逆向分析 - 龙辉's Blog 蓝桥杯省赛Web题解及知识点复习 - 龙辉's Blog 怎么突破图片防盗链? - 龙辉's Blog win10系统下可以上网但是提示没有网络的问题 - 龙辉's Blog Bilibili自动签到之使用教程 - 龙辉's Blog AirBook-自响应式引导页 - 龙辉's Blog qq内打开被拦截链接 - 龙辉's Blog 查询别人qq空间访客记录! - 龙辉's Blog
PHP采集工具之Querylist - 龙辉's Blog
博主: Tinker-站长 · 2019-10-07 · via 龙辉's Blog - 敲代码

ph好用的采集类

最近有个朋友需要我帮他用php采集一些东西,这里我就不得不提很强大的:querylist

官网:http://www.querylist.cc/

简单的介绍一下:QueryList不依赖任何框架和架构,它可以单独使用也可以引入到任意的PHP开发框架中去使用,如:Laravel、ThinkPHP;你可以使用它来构建简单的采集系统,也可以用它才构建高可用的分布式采集系统。它提供了丰富的基于CSS选择器的页面抽取API,完全模块化的设计,拥有强大的可扩展性。

安装

composer require jaeger/querylist

关于composer的安装请大家自行百度.

是不是迫不及待了?别慌,接下来我为你慢慢演示

初探

看看PHP用QueryList做采集到底有多简洁吧!

<?php

use QL\QueryList;

//采集某页面所有的图片
$data = QueryList::get('http://cms.querylist.cc/bizhi/453.html')->find('img')->attrs('src');
//打印结果
print_r($data->all());

//采集某页面所有的超链接和超链接文本内容
//可以先手动获取要采集的页面源码
$html = file_get_contents('http://cms.querylist.cc/google/list_1.html');
//然后可以把页面源码或者HTML片段传给QueryList
$data = QueryList::html($html)->rules([  //设置采集规则
    // 采集所有a标签的href属性
    'link' => ['a','href'],
    // 采集所有a标签的文本内容
    'text' => ['a','text']
])->query()->getData();
//打印结果
print_r($data->all());

/**
 * 在线测试采集并查看采集结果:http://querylist.cc/querylist-test
 */

进阶

上面的采集结果有很多“杂质”,一定不会满足你的要求,来获取我们真正想要的结果。

<?php

// 采集该页面[正文内容]中所有的图片
$data = QueryList::get('http://cms.querylist.cc/bizhi/453.html')->find('.post_content img')->attrs('src');
//打印结果
print_r($data->all());


// 采集该页面文章列表中所有[文章]的超链接和超链接文本内容
$data = QueryList::get('http://cms.querylist.cc/google/list_1.html')->rules([
    'link' => ['h2>a','href','',function($content){
        //利用回调函数补全相对链接
        $baseUrl = 'http://cms.querylist.cc';
        return $baseUrl.$content;
    }],
    'text' => ['h2>a','text']
])->range('.cate_list li')->query()->getData();
//打印结果
print_r($data->all());

全貌

正如你看到的那样,使用QueryList做采集只需要编写采集规则即可!

<?php
/**
 * 下面来完整的演示采集一篇文章页的文章标题、发布日期和文章内容并实现图片本地化
 */

 //引入自动加载文件
require 'vendor/autoload.php';

use QL\QueryList;


//需要采集的目标页面
$page = 'http://cms.querylist.cc/news/566.html';
//采集规则
$reg = [
    //采集文章标题
    'title' => ['h1','text'],
    //采集文章发布日期,这里用到了QueryList的过滤功能,过滤掉span标签和a标签
    'date' => ['.pt_info','text','-span -a',function($content){
        //用回调函数进一步过滤出日期
        $arr = explode(' ',$content);
        return $arr[0];
    }],
    //采集文章正文内容,利用过滤功能去掉文章中的超链接,但保留超链接的文字,并去掉版权、JS代码等无用信息
    'content' => ['.post_content','html','a -.content_copyright -script']
];
$rang = '.content';
$ql = QueryList::get($page)->rules($reg)->range($rang)->query();

$data = $ql->getData(function($item){
  //利用回调函数下载文章中的图片并替换图片路径为本地路径
  //使用本例请确保当前目录下有image文件夹,并有写入权限
  $content = QueryList::html($item['content']);
  $content->find('img')->map(function($img){
      $src = 'http://cms.querylist.cc'.$img->src;
      $localSrc = 'image/'.md5($src).'.jpg';
      $stream = file_get_contents($src);
      file_put_contents($localSrc,$stream);
      $img->attr('src',$localSrc);
  });
  $item['content'] = $content->find('')->html();
  return $item;
});

//打印结果
print_r($data->all());

我给大家演示一下采集我的博客

blog_cj

<?php
require 'vendor/autoload.php';

use QL\QueryList;

$ql = QueryList::get('https://blog.eirds.cn/');

//获取所有h2标签下的a标签的文本
$data = $ql->find('h2>a')->texts();
print_r($data->all());
//获取所有<span>标签下文本
$data = $ql->find('span')->texts();
print_r($data->all());

只需要简单的配置采集规则.这样就简简单单的完成了一些采集,无需写复杂的正则表达式,如果你有jquery基础,那么操作起来肯定是很溜的.官网的api手册还提供了很多丰富的功能,比如多线程GET,post,以及携带各种参数采集.相信大家都迫不及待的想去尝试了吧,快去操作一下吧


版权属于:龙辉博客

本文链接:https://blog.eirds.cn/299.html

如果没有特别声明则为本博原创。转载时须注明出处及本声明!

赞赏作者

如果觉得我的文章对你有用,请随意赞赏