-
2021-04-09 11:28:06
说明
可以在getData()方法中多次调用QueryList来实现递归多级采集。
示例<?php
require 'QueryList/vendor/autoload.php';
use QL\QueryList;
//获取每个li里面的h3标签内容,和class为item的元素内容
$html =<<
xxx
item1item2xxx2
item12item22
STR;
$data = QueryList::Query($html,array(
'title' => array('h3','text'),
'list' => array('.list','html')
),'#demo li')->getData(function($item){
$item['list'] = QueryList::Query($item['list'],array(
'item' => array('.item','text')
))->data;
return $item;
});
print_r($data);
/**
结果:
Array
(
[0] => Array
(
[title] => xxx
[list] => Array
(
[0] => Array
(
[item] => item1
)
[1] => Array
(
[item] => item2
)
)
)
[1] => Array
(
[title] => xxx2
[list] => Array
(
[0] => Array
(
[item] => item12
)
[1] => Array
(
[item] => item22
)
)
)
)
*/
更多相关内容 -
Querylist批量采集碰到404咋办
2021-04-22 17:50:481、tp框架搭配querylist 使用CurlMulti插件 多线程执行后在执行一段时间后出现4042、环境 php nginx mysql 数据量不小(本来用的apache,后来动不动服务器500,代码超时时间都设置了,不行就切换nginx)3、相关代码// ...1、tp框架搭配querylist 使用CurlMulti插件 多线程执行后在执行一段时间后出现404
2、环境 php nginx mysql 数据量不小(本来用的apache,后来动不动服务器500,代码超时时间都设置了,不行就切换nginx)
3、相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
如下如果这个url 404 那么往后就不执行了 其实我加了判断来着
public function makeids()
{
$index = input('param.index');//接收id用于半自动采集
$last = input('param.last');//接收id用于半自动采集
set_time_limit(3600);
$urlmake = [];
$ql = QueryList::getInstance();
for ($i = $index; $i <=$last; $i++) {
for ($j = $i . '000'; $j <= $i . '999'; $j++) {
if (ISCESHI){
$url = LOCALURL."/index.php/index/index/getlists/id/" . $i . '_' . $j;
}else{
$url = SERVICE."/index.php/index/index/getlists/id/" . $i . '_' . $j;
}
$urlmake [] = $url;
if(count($urlmake)>=5){
$ql->use(CurlMulti::class);
$ql->curlMulti($urlmake)
->success(function (QueryList $ql, CurlMulti $curl, $r) {
echo "Current url:{$r['info']['url']} \r\n";
// if (!empty($r)){
$this->getlists($r['info']['url']);
// }
unset($urlmake);
$ql->destruct();
})
->start([
// 最大并发数,这个值可以运行中动态改变。
'maxThread' => 1999,
// 触发curl错误或用户错误之前最大重试次数,超过次数$error指定的回调会被调用。
'maxTry' => 3,
// 全局CURLOPT_*
'opt' => [
CURLOPT_TIMEOUT => 3600,
// CURLOPT_CONNECTTIMEOUT => 1,
CURLOPT_CONNECTTIMEOUT => 0,
CURLOPT_RETURNTRANSFER => true
],
// 缓存选项很容易被理解,缓存使用url来识别。如果使用缓存类库不会访问网络而是直接返回缓存。
'cache' => ['enable' => false, 'compress' => false, 'dir' => null, 'expire' => 86400, 'verifyPost' => false]
]);
}
}
}
}
这里 采集结果非空的时候
$result = $data->all();
if (!empty($result)) {
xx这里执行相关代码
}
4、我希望有懂得人能帮我看看咋回事。希望的结果就是假如出现了404 或者其他一些无响应的异常 线程不中断继续执行其他url;
-
(phpstudy)CurlMulti:queryList批量采集图片链接到数据库
2018-12-23 11:36:35另,虽然采集到了图片(也就是说改改就能采集到文章内容),但是呢离自己想要的文章变形还有不小的差距.就当技术储备了吧. ̄へ ̄ 之前遇到的问题 CurlMulti 在QueryList中找不到 AbsoluteUrl也无法使用 使用composer...呃,现阶段还不会使用多线程里配合图片的直接下载 -2018-12-23 11:29:45
另,虽然采集到了图片(也就是说改改就能采集到文章内容),但是呢离自己想要的文章变形还有不小的差距.就当技术储备了吧. ̄へ ̄
之前遇到的问题
CurlMulti 在QueryList中找不到
AbsoluteUrl也无法使用使用composer安装
composer require jaeger/querylist-curl-multi composer require jaeger/querylist-absolute-url
下面是完整的代码
<?php namespace app\index\controller; use \app\index\controller\User; use \app\admin\controller\Index as AdminIndex; use QL\QueryList; use QL\Ext\AbsoluteUrl; use QL\Ext\CurlMulti; use think\Db; use think\Controller; class Index extends Controller { public function index() { $DB=new Db; // $data = $DB::table('gxxl')->select(); $data = Db::query("select * from imgmsic"); // 分配数据 $this->assign("data",$data); return view(); } public function gxxlImg() { // 注册插件 $ql = QueryList::use([ AbsoluteUrl::class, // 转换URL相对路径到绝对路径 CurlMulti::class // Curl多线程采集 ]); // 获取文章列表链接集合,使用AbsoluteUrl插件转换URL相对路径到绝对路径. $urls = $ql->get('http://baidu.com/tupian/list.html',[ 'param1' => 'testvalue', 'params2' => 'somevalue' ],[ 'headers' => [ 'Referer' => 'http://baidu.com/', 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'], 'Cookie' => 'abc=111;xxx=222' ] ])->absoluteUrl('http://baidu.com/tupian/list.html')->find('.hy-video-list .clearfix a')->attrs('href')->all(); //使用CurlMulti多线程插件采集文档内容 $ql->rules([ // 设置采集规则 // 'title' => ['.head h3', 'text'], 'imgArr' => ['#playlist .playlist', 'html'], // 'imgArr' => array('#playlist4 img','originalsrc') ]) // 设置采集任务 ->curlMulti($urls) // 每个任务成功完成调用此回调 ->success(function (QueryList $ql, CurlMulti $curl, $r) { echo "Current url:{$r['info']['url']} \r\n"; $data = $ql->query()->getData()->all(); $durl = QueryList::html($data[0]['imgArr'])->find('img')->map(function($a){ $src= $a->attr('originalsrc'); $title= $a->attr('title'); // 直接下载不会,只好写入到数据库中,再通过php curl下载吧 Db::execute("insert into imgmsic value(null,?,?)",[$src,$title]); return $a->attr('originalsrc'); }); dump($durl); dump($data); }) // 开始执行多线程采集 ->start([ // 最大并发数 'maxThread' => 10, // 错误重试次数 'maxTry' => 3 ]); } }
-
youtube批量采集-低成本解决方案-2
2018-12-18 15:18:30之前我有一篇文章《YouTube视频爬虫-批量采集-低成本解决方案-技术难点和细节回顾》 提到过一种u2b视频采集的方案。该方法适用于针对特定的up主进行批量采集,成本确实挺低,速度也蛮好。之前曾在博客下方挂出邮箱...之前我有一篇文章《YouTube视频爬虫-批量采集-低成本解决方案-技术难点和细节回顾》 提到过一种u2b视频采集的方案。该方法适用于针对特定的up主进行批量采集,成本确实挺低,速度也蛮好。之前曾在博客下方挂出邮箱地址,寻求技术交流,但是被很多伸手党给打扰,在这里我只想坚决地告诉诸位:给代码是不可能的,我相信思路对你们才是更重要滴。
如果你对这方面有兴趣,可以和我们一群程序员交流学习,共同进步
695623459
背景:
1.腾讯云的非HK地区外地服务器均很难连接
2.某些HK地区的服务器也很难连接
3.我们需要根据关键字进行u2b视频采集,用以支撑我们自己开发的视频编辑器的本地素材库针对上述背景,初步意见:
1.腾讯云如果做视频采集只能用HK的服务器了
2.HK地区的某些服务器无法连接,我目前推测的原因是恰好你使用的ip被禁,你需要绑定弹性ip,更换ip地址,直到换到本地可用ip
3.针对关键字的视频采集,还在想着用爬虫吗?千万别走弯路啊!Google开放了 YouTube Data api ,直接可以拿到结果。整体思路
1.Rest API:部署在HK服务器,转发YouTube Data api查询结果
2.GUI:运行在使用者电脑,用于用户采集操作,用户根据关键字获取待采集任务列表
3.采集器:运行在HK服务器,依然使用我们的youtube-dl
4.采集完成之后,推到同区的腾讯云对象存储-HK区
5.本地下载器,运行在使用者电脑,用于从腾讯云对象存储下载视频到本地价格计算
经过计算,每天下载15分钟内的视频200个,每月的运行成本是300多。114元买到1C1G2M的HK服务器,每天的采集极限是160GBYouTube Data API 开发文档传送门
关于YouTube Data api我有话要讲
在之前的文章中有提到,当时走了弯路去看 youtube-api ,结果发现并没有什么卵用,这次呢?可是沾了光,不走弯路,直达目的地啦~
YouTube API中的Search/list接口,可以直接根据关键字获取符合条件的vedio、channel、playlist,下面是官方给出的demo# Sample python code for search.list def search_list_by_keyword(client, **kwargs): # See full sample for function kwargs = remove_empty_kwargs(**kwargs) response = client.search().list( **kwargs ).execute() return print_response(response) search_list_by_keyword(client, part='snippet', maxResults=25, q='surfing', type='')
其实筛选条件有很多的,甚至具体到结果排序方式都可以配置。
返回
{ "kind": "youtube#searchListResponse", "etag": etag, "nextPageToken": string, "prevPageToken": string, "regionCode": string, "pageInfo": { "totalResults": integer, "resultsPerPage": integer }, "items": [ search Resource ] }
-
胖鼠采集WordPress插件教程-WP自动采集和发布简书,微信公众号,知乎等任意网站
2021-08-06 04:13:31Wordpress用于采集建站一直以来做垃圾站的朋友都在采用。一来是Wordpress的本身的SEO做得挺不错的,有利搜索引擎收录和SEO排名;另一方面则是Wordpress还有非常多的强大插件,利用Wordpress采集... -
京东商品图片采集详细教程
2021-04-21 10:05:09本文介绍采集使用八爪鱼7.0采集京东商品图片的方法:首先将京东商品搜索结果网页中图片的URL采集下来,再通过八爪鱼专用的图片批量下载工具,将采集到的图片URL中的图片,下载并保存到本地电脑中。采集网址:京东... -
PHP使用QueryList快速切片式查询和筛选结果
2021-04-24 10:34:22区域选择器或者叫做切片...当采集列表的时候,建议设置这个参数。//第一种写法:没有用到[区域选择器]$ql=QueryList::get('http://www.baidu.com/s?wd=QueryList')->rules(['title'=>array('h3','text'),'link... -
拼多多数据采集
2020-09-21 23:41:01千辛万苦,总算把新的拼多多采集方案弄出来了,回想起几个月的尝试和摸索,真心觉得不容易。 前期尝试的方案包括但不限于: 1、H5,PDDAccessToken+anticontent 这个方案很明显,需要处理两个问题: 1)账号... -
我用Python自动化批量下载gitee项目
2021-08-28 17:02:25项目名称和链接采集三.下载项目四.open函数的参数说明 前言 Gitee上的项目放太多有点乱了,最近想归类整理一下。开始想着40个项目手动clone下来本地整理,应该花不了多少时间。实际操作起来还是太麻烦了,代码能... -
蜘蛛大师(zhizhudashi) v1.5 官方版.zip
2019-07-06 08:11:38文章的标题、内容、关键词一键修改,可批量导入TXT内容,瞬间生成上万篇文章,系统也提供新闻采集,自动抓取热门新闻,在配合关键词管理,可做热门关键词优化。 同时给上百个站增加外链 在权重池管理里只需要添加... -
爱站蜘蛛池/站群程序,免费版,确保可用
2018-11-29 11:47:53批量添加域名、添加关键词,一键建立上百万个网站。轻松获取百万流量!全自动更新:只要您建立网站后,程序将全自动采集、全自动发布文章(智能原创),彻底解放您的双手. -
PHP+laravel之ES搜索详解
2021-11-23 08:35:57public function queryList(){ //数据采集 $ql = QueryList::get("http://www.rz-tea.com/"); $data['author'] = $ql->find('.topic a')->texts(); $data['title'] = $ql->find('.article-title a')->texts(); $... -
java基于springboot开发的小学初中高中学生评教系统
2021-01-24 16:00:05重点 评教系统要解决批量录入数据的问题,因为一个学校的学生很多,这里采用导入Excel表格的方式,java代码的话用poi技术实现; 以下是核心导入导出Excel的代码 package com.mfc.ctrl; import java.text.... -
学校评教系统
2021-01-08 15:15:45重点 评教系统要解决批量录入数据的问题,因为一个学校的学生很多,这里采用导入Excel表格的方式,java代码的话用poi技术实现; 以下是核心导入导出Excel的代码 package com.mfc.ctrl; import java.text.... -
JrkBlog简易博客-你值得拥有
2021-09-01 18:18:55phpquerylist数据采集, phpword导出word文档, 实用好用的API接口, OSS,COS等云端图片上传, jpush极光推送, 批量邮件发送,多语言化, 灵活开启谷歌验证码验证。 导航栏目 | 官网地址 | TP6开发手册 | 服务器 :... -
php应聘个人简历模板
2020-12-21 06:54:333、合拍后台数据统计及运营审核功能开发 4、基于阿里云域名解析接口编写域名批量修改解析记录脚本 5、使用第三方微信域名检测接口编写域名有效性批量检测脚本 离职原因: 个人原因 公司名称: 新店宝网络科技有限... -
jrkadmin_tp6_layui
2021-04-24 15:49:13JrkAdmin(TP6.0.6版本) —— 你值得信赖的后端开发框架 如果对您有...后台采用RABC权限验证,不懂的同学可以查看相关文档实现管理员管理,权限管理,角色管理,菜单管理,附件管理,日志管理phpquerylist数据采集... -
关系图谱服务的技术方案设计
2021-01-08 19:04:39在二手车业务线,现阶段无法实现车辆、人、车商信息的在业务审核流程中的数据查重应用,因此业务方为了达成这一目标,基于数据采集和数据查询,应运而生了关系图谱服务。 文章目录一、系统架构二、业务概述三、方案... -
《电影记忆》-又拍云比赛作品总结
2019-09-13 04:06:24首先,什么话也不说,直接上效果图。 查看效果: 电影记忆》 插件是在onethink 平台上开发的一个用于记录自己观看电影、电视媒体的展示工具。 使用技术 bootstrap2.3.1 ui ... QueryList p... -
java总结
2020-07-27 01:50:28/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home Springboot注解 @RequestParam @RequestBody @RequestParam Long mailConfigId, @RequestParam(required = false) String pt, ... -
技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架
2020-02-13 12:35:37整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 写在前边 用单元测试Junit完全可以满足日常开发自测,为什么还要学习... -
爬虫框架整理汇总
2018-06-11 16:46:00规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/kafka/csv/excel等)、有大量Demo共享;另外它还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。 框架特点 为具备一定Go或... -
CMDB资产管理系统
2019-03-04 17:56:00一、远程服务器资产信息采集方案 实现方案一:agent——server服务端模式 应用场景:多应用于服务器数量多情况下,效率比ssh方式高 客户端: ################### 方式一:Agent,每一台服务器一份 ###########... -
有用的工具续
2018-08-25 21:51:34前文 markdown https://ivarptr.github.io/yu-...Typora https://www.typora.io/ http://mark.uxwin.com/https://wordmarkapp.com/ 单词库 http://www.xsdict.cn/ 去广告 Hosts https://githu... -
一步一步地配置Spring
2016-05-19 16:29:48(防采集:本文唯一网址在CSDN上,博主会不定期更新加载其它配置,其它均为未经博主同意转载的,原文为http://blog.csdn.net/tangtong1/article/details/51442757) ##二、配置Json支持 ###6. 添加Json依赖 ...