1. 简介
QueryList 是一款基于链式操作的 PHP 采集工具库,可以方便地完成各种网页内容采集和处理任务。使用 QueryList 可以轻松实现网页爬虫、数据挖掘、自动化测试等任务。
2. TP5 框架使用QueryList 采集框架爬小说操作示例
2.1 安装 QueryList
安装 QueryList 的方法有多种,这里介绍使用 Composer 安装 QueryList 的方法:
composer require jaeger/querylist
2.2 TP5 框架中使用 QueryList
接下来介绍在 TP5 框架中使用 QueryList 完成网页采集的方法。具体而言,本文以使用 QueryList 采集笔趣阁网站的小说为例:
2.3 示例代码
use QL\QueryList;
class Novel
{
// 采集目标网址
private $baseUrl = 'https://www.xbiquge.cc';
// 采集目标页面 URL
private $url;
public function __construct($url)
{
$this->url = $url;
}
// 获取小说章节列表
public function getChapterList()
{
$chapters = [];
$html = file_get_contents($this->url);
$rules = [
'chapter' => ['dd > a', 'text'],
'url' => ['dd > a', 'href']
];
$data = QueryList::html($html)->rules($rules)->query()->getData();
foreach ($data as $item) {
$chapters[] = [
'title' => $item['chapter'],
'url' => $this->baseUrl . $item['url']
];
}
return $chapters;
}
// 获取小说内容
public function getContent($url)
{
$html = file_get_contents($url);
$rules = [
'content' => ['#content', 'text']
];
$data = QueryList::html($html)->rules($rules)->query()->getData();
return $data->all()[0]['content'];
}
}
// 使用示例
$url = 'https://www.xbiquge.cc/book/4449/';
$novel = new Novel($url);
$chapters = $novel->getChapterList();
foreach ($chapters as $chapter) {
$content = $novel->getContent($chapter['url']);
echo $chapter['title'] . "\n";
echo $content . "\n";
}
上述代码中,我们首先定义了一个 Novel 类并在其中定义了两个方法:
getChapterList:用于获取小说章节列表
getContent:用于获取小说内容
在 getChapterList 方法中,我们使用 QueryList 定义了数据采集规则,将小说章节和 URL 采集到了数据中。在 foreach 循环中,我们将每个章节的标题和 URL 提取出来,并保存在一个数组中。最后,将这个数组返回。
在 getContent 方法中,我们通过传入章节的 URL,抓取该章节的网页内容,并使用 QueryList 提取出文章正文。最后,将文章正文返回。
在最后的使用示例中,我们用 Novel 类获取了小说章节列表,并将所有章节的标题和内容输出到了命令行中。