您现在的位置是:首页 > PHP框架交流PHP框架交流
thinkphp使用querylist采集笑话网站笔记
上善若水2020-07-15 00:34:19【PHP框架交流】 3329人已围观
简介thinkphp使用querylist采集笑话网站笔记,使用thinkphp commands命令写法采集小说数据,不多说直接上代码. 1.创建数据采集记录表CREATE TABLE `joke_li
thinkphp使用querylist采集笑话网站笔记,使用thinkphp commands命令写法采集小说数据,不多说直接上代码.
1.创建数据采集记录表
CREATE TABLE `joke_list` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`category` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`link` varchar(255) DEFAULT NULL,
`status` tinyint(4) DEFAULT '1',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `joke_detail` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`category` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`tag` varchar(255) DEFAULT NULL,
`description` varchar(2000) DEFAULT NULL,
`content` text,
`link` varchar(255) DEFAULT NULL,
`status` tinyint(4) DEFAULT '1',
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2.编写数据库模型
JokeDetail.php
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin \think\Model
*/
class JokeDetail extends Model
{
protected $autoWriteTimestamp = 'datetime';
}
JokeList.php
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin \think\Model
*/
class JokeList extends Model
{
protected $autoWriteTimestamp = 'datetime';
}
3.安装querylist框架
执行composer安装命令composer require jaeger/querylist
参考安装文档
4.创建commands编写采集脚本代码
<?php
declare (strict_types=1);
namespace app\command;
use app\model\JokeDetail;
use app\model\JokeList;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use QL\QueryList;
use QL\Ext\AbsoluteUrl;
use GuzzleHttp\Exception\RequestException;
use think\facade\Log;
class Joke extends Command
{
protected function configure()
{
// 指令配置
$this->setName('caiji')
->setDescription('the caiji command');
}
protected function execute(Input $input, Output $output)
{
$this->task();
$this->task2();
}
protected function task()
{
$domain = "https://xiaohua.bbwx.com/";
$ql = QueryList::getInstance();
$ql->use(AbsoluteUrl::class);
$rules = array(
'category' => ['header>a', 'text'],
'link' => ['h2 a', 'href'],
'title' => ['h2 a', 'text']
);
// 切片选择器
$range = ".content .excerpt-text";
$i = 1;
while (true) {
try {
$q1 = $ql->get("https://xiaohua.bbwx.com/page/{$i}", null, ["timeout" => 30])->absoluteUrl($domain);
$rt1 = $q1->rules($rules)
->range($range)->query()->getData()->all();
Log::INFO("开始采集第{$i}页数据!");
if ($rt1) {
$jokeList = new JokeList();
$jokeList->saveAll($rt1);
}
} catch (RequestException $e) {
Log::INFO("第一页数据请求超时,正在重试!");
continue;
}
if ($i >= 146) {
break;
}
$i++;
};
}
protected function task2()
{
$ql = QueryList::getInstance();
$jokeList = JokeList::where("status", 1)->select();
foreach ($jokeList as $joke) {
try {
$q1 = $ql->get($joke->link, null, ["timeout" => 30]);
$q1->find('.content .article-content .asb')->remove();
$joke_detail = [
"category"=> $joke->category,
"title"=> $ql->find('.article-title')->text(),
"tag"=>$ql->find(".article-tags>a")->text(),
"description"=>$ql->find("meta[name='description']")->attr("content"),
"content"=>htmlentities($ql->find('.content .article-content')->html()),
"link"=>$joke->link,
"status"=>2
];
$jokeDetail=JokeDetail::where("link",$joke->link)->findOrEmpty();
$jokeDetail->save($joke_detail);
$joke->status=2;
$joke->save();
} catch (RequestException $e) {
Log::INFO("请求超时{$joke->link},正在重试!");
continue;
}
}
}
}
5.注册该脚本命令config/console.php
<?php
// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
// 指令定义
'commands' => [
'joke' => 'app\command\Joke',
],
];
6.执行命令采集结果等待采集完成PHP think joke
Tags: querylist
很赞哦! (6)
相关文章
随机图文
-
php技术提升心得与方法
现在的PHP市场虽然充斥了大量的的PHP开发人员,但这些人当中真正能称得上高手的却寥寥无几。很多公司虽然招聘了一些PHP开发人员,但是由于技术水平不高,导致公司的项目一直堆积。这不仅另公司无奈也让已经入职的PHP开发人员着急,他们也想要在PHP领域更近一步,但却苦于找不到提高自己的方法,下面我们的鸥仔收集了一些PHP大神的一些工作方式、习惯,让大家看看PHP大神们是如何工作,也希望这些方法能帮助到那些想要在PHP领域更近一步的人。 -
开心一刻:笑死人不偿命的极品笑话
1、今天打雷,雷声有点点大,老公上班不在家。正想着是不是发条短信去装下可怜,结果老公电话来了,正高兴原来那货这么关心我,结果他说:把家里电插头拔了。我问他还有别的事没?他说没了。我说你咋不关心我啊,打雷呐!!!他哦了声说:那你小心点,别被雷劈了…被雷劈!!!我恨 2、今天去剪了个头发,后来理发师没要钱。 3、有个死党叫刘查向,,今天才知道她妈姓向,当我听到他妈姓向时,我笑喷了,呵呵,,他爸挺幽 -
中药到底是“纯天然无毒”还是“是药三分毒”
从小到大,我从师长的口耳相传与电视广告的宣传中所得到的关于中药的印象是“纯天然”、“无毒副作用”、“标本兼治”,并且中药常常被拿来和现代药物(即所谓西药)进行比较。大多数中国人通常认为西药见效快但是治 -
springboot 整合mybatis 编写第一个查询demo
目前主流的数据库持久层有springdatajpa与mybatis两种方式,其中mybatis在国内使用更为广泛,一起来边写第一个mybatisdemo吧!项目源码下载地址:码云仓库首先看下最终代