queryList爬虫获取内容的几种方法总结 queryList给抓取的内容增加html追加元素html 代码实例...

//简略内容:
1.
$data1 = $ql->find('.two img')->map(function($item){return $item->alt;
});
// 等价下面这句话
$data2 = $ql->find('.two img')->attrs('alt');2.
$texts = $ql->find('.two>a')->texts();
$htmls = $ql->find('#one span')->htmls();3.
$ql = QueryList::get('https://www.ithome.com/html/discovery/358585.htm');
$rt = [];
// 采集文章标题
$rt['title'] = $ql->find('h1')->text();4.采集列表所有  用all
$rt = QueryList::get($url)->rules($rules)->query()->getData();
print_r($rt->all());
//QueryList V4.0.4版本新增了一个queryData()语法糖来简化这种操作:
$rt = QueryList::get($url)->rules($rules)->queryData();
queryData()方法等同于query()->getData()->all()

$ql = QueryList::html($html); // 获取div元素对象 $div = $ql->find('div:eq(0)'); // 向div元素中追加一个img元素 queryList给抓取的内容增加html追加元素html
//(在元素操作页面文档 不是结果处理 http://www.querylist.cc/docs/guide/v4/modify-dom)
$div->append('<img src="1.jpg" />');
//获取HTTP响应头等信息 use GuzzleHttp\Client;$client = new Client(); $response = $client->get('http://httpbin.org/get'); // 获取响应头部信息 $headers = $response->getHeaders();//内容过滤 // 采集正文内容 $eles = QueryList::html($html)->find('#content'); // 选择正文内容中要移除的元素,并移除 $eles->find('.tt,span:last,p:last')->remove(); //获取纯净的正文内容 $content = $eles->html();$rt = QueryList::rules($rules)->html($html)->query()->getData();$rt = QueryList::rules($rules)->html($html)->query()->getData(function($item){$ql = QueryList::html($item['content']);$ql->find('.tt,span:last,p:last')->remove();$item['content'] = $ql->find('')->html();return $item;});//QueryList内置的HTTP客户端 //更多高级参数 //还可以携带更多高级参数,如:设置超时时间、设置代理等。 $ql = QueryList::get('http://httpbin.org/get',['param1' => 'testvalue','params2' => 'somevalue' ],[// 设置代理'proxy' => 'http://222.141.11.17:8118',//设置超时时间,单位:秒'timeout' => 30,'headers' => ['Referer' => 'https://querylist.cc/','User-Agent' => 'testing/1.0','Accept' => 'application/json','X-Foo' => ['Bar', 'Baz'],'Cookie' => 'abc=111;xxx=222']]);//使用文件缓存驱动 //// 缓存文件夹路径 //$cache_path = __DIR__.'/temp/'; $ql = QueryList::get($url,null,['cache' => $cache_path,'cache_ttl' => 600 // 缓存有效时间,单位:秒,可以不设置缓存有效时间 ]);//使用 HTTP Cache //use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; QueryList::multiGet($urls)->success(function(QueryList $ql,Response $response, $index) use($urls){echo 'Current url: '.$urls[$index]."\r\n";$data = $ql->find('h3>a')->texts();print_r($data->all());})->send();//更高级的用法//use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; // //$rules = [ // 'name' => ['h3>a','text'], // 'desc' => ['.py-1','text'] //]; //$range = '.repo-list>li'; QueryList::rules($rules)->range($range)->multiGet($urls)// 设置并发数为2->concurrency(2)// 设置GuzzleHttp的一些其他选项->withOptions(['timeout' => 60])// 设置HTTP Header->withHeaders(['User-Agent' => 'QueryList'])// HTTP success回调函数->success(function (QueryList $ql, Response $response, $index){$data = $ql->queryData();print_r($data);})// HTTP error回调函数->error(function (QueryList $ql, $reason, $index){// ... })->send();//详细版 1. $data1 = $ql->find('.two img')->map(function($item){return $item->alt; }); // 等价下面这句话 $data2 = $ql->find('.two img')->attrs('alt');print_r($data1->all());2. $texts = $ql->find('.two>a')->texts(); $htmls = $ql->find('#one span')->htmls();print_r($texts->all());3. use QL\QueryList;$ql = QueryList::get('https://www.ithome.com/html/discovery/358585.htm');$rt = []; // 采集文章标题 $rt['title'] = $ql->find('h1')->text();4.采集列表所有 用all //use QL\QueryList;//$url = 'https://www.ithome.com/html/discovery/358585.htm'; //// 定义采集规则 //$rules = [ // // 采集文章标题 // 'title' => ['h1','text'], // // 采集文章作者 // 'author' => ['#author_baidu>strong','text'], // // 采集文章内容 // 'content' => ['.post_content','html'] //]; $rt = QueryList::get($url)->rules($rules)->query()->getData(); print_r($rt->all());$rt = QueryList::get($url)->rules($rules)->query()->getData(); print_r($rt->all()); //QueryList V4.0.4版本新增了一个queryData()语法糖来简化这种操作: $rt = QueryList::get($url)->rules($rules)->queryData(); queryData()方法等同于query()->getData()->all()//QueryList内置的HTTP客户端 //更多高级参数 //还可以携带更多高级参数,如:设置超时时间、设置代理等。 $ql = QueryList::get('http://httpbin.org/get',['param1' => 'testvalue','params2' => 'somevalue' ],[// 设置代理'proxy' => 'http://222.141.11.17:8118',//设置超时时间,单位:秒'timeout' => 30,'headers' => ['Referer' => 'https://querylist.cc/','User-Agent' => 'testing/1.0','Accept' => 'application/json','X-Foo' => ['Bar', 'Baz'],'Cookie' => 'abc=111;xxx=222']]);//使用文件缓存驱动 //// 缓存文件夹路径 //$cache_path = __DIR__.'/temp/'; $ql = = QueryList::get($url,null,['cache' => $cache_path,'cache_ttl' => 600 // 缓存有效时间,单位:秒,可以不设置缓存有效时间 ]);//使用 HTTP Cache //use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; QueryList::multiGet($urls)->success(function(QueryList $ql,Response $response, $index) use($urls){echo 'Current url: '.$urls[$index]."\r\n";$data = $ql->find('h3>a')->texts();print_r($data->all());})->send();//更高级的用法//use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; // //$rules = [ // 'name' => ['h3>a','text'], // 'desc' => ['.py-1','text'] //]; //$range = '.repo-list>li'; QueryList::rules($rules)->range($range)->multiGet($urls)// 设置并发数为2->concurrency(2)// 设置GuzzleHttp的一些其他选项->withOptions(['timeout' => 60])// 设置HTTP Header->withHeaders(['User-Agent' => 'QueryList'])// HTTP success回调函数->success(function (QueryList $ql, Response $response, $index){$data = $ql->queryData();print_r($data);})// HTTP error回调函数->error(function (QueryList $ql, $reason, $index){// ... })->send();//获取HTTP响应头等信息 use GuzzleHttp\Client;$client = new Client(); $response = $client->get('http://httpbin.org/get'); // 获取响应头部信息 $headers = $response->getHeaders();//内容过滤 // 采集正文内容 $eles = QueryList::html($html)->find('#content'); // 选择正文内容中要移除的元素,并移除 $eles->find('.tt,span:last,p:last')->remove(); //获取纯净的正文内容 $content = $eles->html();//$rules = [ // // 移除内容中所有的超链接,但保留超链接的内容,并移除内容中所有p标签,但保留p标签的内容 // 'content_html' => ['#content','html','a p'], // // 保留内容中的超链接,以及保留p标签及内容 // 'content_text' => ['#content','text','a p'], //]; $rt = QueryList::rules($rules)->html($html)->query()->getData();// //$rules = [ // 'content' => ['#content','html'] //]; $rt = QueryList::rules($rules)->html($html)->query()->getData(function($item){$ql = QueryList::html($item['content']);$ql->find('.tt,span:last,p:last')->remove();$item['content'] = $ql->find('')->html();return $item;});

 

$data1 = $ql->find('.two img')->map(function($item){    return $item->alt;});$data1 = $ql->find('.two img')->map(function($item){    return $item->alt;});// 等价下面这句话$data2 = $ql->find('.two img')->attrs('alt');
print_r($data1->all());$texts = $ql->find('.two>a')->texts();$htmls = $ql->find('#one span')->htmls();
print_r($texts->all());

转载于:https://www.cnblogs.com/stillstep/p/10953512.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++解析-外传篇(1):异常处理深度解析

0.目录 1.异常的最终处理 2.结束函数terminate() 3.小结 1.异常的最终处理 问题&#xff1a; 如果在main函数中抛出异常会发生什么&#xff1f; 如果异常不处理&#xff0c;最后会传到哪里&#xff1f; 下面的代码的输出什么&#xff1f; 示例——异常的最终处理&#xff1f;&a…

《浅谈架构之路:前后端分离模式》 - 山人行 - 博客园

前言&#xff1a;分离模式 对前后端分离研究了一段时间&#xff0c;恰逢公司有一个大项目决定尝试使用前后端分离模式进行&#xff0c;便参与其中。该项目从2016年初立项至今&#xff0c;平平稳稳得度过&#xff0c;但也涌现出越来越多的问题&#xff0c;绝对不是说前后端分离模…

springboot快速集成swagger

今天技术总监说&#xff1a;小明&#xff0c;我们本次3.0改造&#xff0c;使用swagger2.0作为前后端分离的接口规范&#xff0c;它可以一键生成前后端的API,一劳永逸……小明&#xff1a;&#xff1f;&#xff1f;&#xff1f; Spring Boot 框架是目前非常流行的微服务框架&…

php curl处理get和post请求

CURL 是一个利用URL语法规定来传输文件和数据的工具&#xff0c;支持很多协议&#xff0c;如HTTP、FTP、TELNET等。最爽的是&#xff0c;PHP也支持 CURL 库。使用PHP的CURL 库可以简单和有效地去抓网页。你只需要运行一个脚本&#xff0c;然后分析一下你所抓取的网页&#xff0…

【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客

前戏 前后端分离已成为互联网项目开发的业界标准使用方式&#xff0c;通过nginxtomcat的方式&#xff08;也可以中间加一个nodejs&#xff09;有效的进行解耦&#xff0c; 并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务&#xff08;多种客户…

MongoDB升级导致启动失败

起因 最近项目使用MongoDB,但是作为一个技术菜鸟&#xff0c;NoSQL数据库我还真不会用&#xff0c;于是我就在自己的阿里云服务器上安装了一个MongoDB4.0.9。 现象 但是当我使用yum -y update升级以后&#xff0c;MongoDB无法启动了&#xff0c;即使重装删除了MongDB的文件了还…

测者的测试技术手册:揭开java method的一个秘密--巨型函数

揭开java method的一个秘密&#xff1a;巨型函数 相信&#xff0c;很多人都不知道Java的Method的上限为64K。本文将超过这个上限的函数叫做巨型函数。 巨型函数的问题 1、如果代码超过了这个限制&#xff0c;Java编译器就报"Code too large to complier"的错误。 2、…

前端攻略系列(二) - 前端各种面试题

幸运且光荣的被老大安排了一个任务 - “去整理些前端面试题”。年前确实不是招人的好时候&#xff0c;所以我们前端团队经过了超负荷的运转&#xff0c;终于坚持过了春节。春节以后就开始招人啦&#xff0c;这套题考察的目标就是基础基础再基础&#xff0c;嘿嘿。 事先声明&…

html 初识

一、web请求流程模拟 python编写的简易服务器应用程序 import socketserversocket.socket() ip_port (127.0.0.1,8080) server.bind(ip_port) server.listen()while 1:conn, addr server.accept()from_browser_msgconn.recv(1024)print(from_browser_msg)conn.send(bHTTP/1.1 …

Iframe的那些事

在web开发中&#xff0c;经常会用到iframe&#xff0c;难免会碰到需要在父窗口中使用iframe中的元素、或者在iframe框架中使用父窗口的元素 js 在父窗口中获取iframe中的元素 1、 格式&#xff1a;window.frames["iframe的name值"].document.getElementByIdx_x(…

异常处理try...catch...throw

C 引入了异常处理机制。其基本思想是&#xff1a;函数 A 在执行过程中发现异常时可以不加处理&#xff0c;而只是“拋出一个异常”给 A 的调用者&#xff0c;假定为函数 B。 拋出异常而不加处理会导致函数 A 立即中止&#xff0c;在这种情况下&#xff0c;函数 B 可以选择捕获 …

Makefile 中:= ?= += =的区别

是最基本的赋值: 是覆盖之前的值? 是如果没有被赋值过就赋予等号后面的值 是添加等号后面的值转载于:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/10118039.html

原生JS写Ajax的请求函数

本文主要介绍了如何通过原生JavaScript封装ajax请求&#xff0c;文中给出了具体的实现代码和详细的解释&#xff0c;希望对你有所帮助。 一、JS原生Ajax ajax&#xff1a;一种请求数据的方式&#xff0c;不需要刷新整个页面&#xff1b; ajax的技术核心是 XMLHttpRequest 对象&…

软件工程--第十三周学习进度

第十三周代码量258 所花时间 6h博客量 2篇了解到的知识点 在寻找“水王”程序编写时&#xff0c;学习了一种新的设计思想&#xff0c;两两删除法&#xff0c;最后剩下的就是水王。这种设计思想&#xff0c;感觉可以用到多种编程&#xff0c;感觉很有意思。转载于:https://www.c…

如何使用 tf object detection

# 如何使用 tf object detectionhttps://juejin.i m/entry/5a7976166fb9a06335319080https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9https://towardsdatascience.com/building-a-toy-detector-with…

WEB文件上传之JQuery ajaxfileupload插件使用(二)

1.JQuery ajaxfileupload插件使用准备 下载地址&#xff1a; http://www.phpletter.com/DOWNLOAD/ 2.原理分析 ajaxfileupload也是利用iframe实现无刷新异步提交&#xff0c;与我的上一篇文章&#xff08;WEB文件上传之apache common upload使用&#xff08;一&#xff09;&…

Navicat安装激活

有条件的同学麻烦不要使用下面的激活步骤&#xff0c;仅供个人学习使用 。。。。。。 。。。。。。 。。。。。。 。。。。。。 一、去官网下载最新Navicat软件https://www.navicat.com.cn/download/navicat-premium 二、去下载激活脚本https://github.com/DoubleLabyrinth/nav…

WEB文件上传之apache common upload使用(一)

文件上传一个经常用到的功能&#xff0c;它有许多中实现的方案。 页面表单 RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) 自定义数据规范 http协议上传 页面控件(flash/html5/act…

前端CSS学习笔记

一 CSS介绍 层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;超文本标记语言&#xff09;或XML&#xff08;标准通用标记语言的一个子集&#xff09;等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本语…

自律以自救

在一次逻辑思维的跨年晚会上&#xff0c;罗胖曾以「帝王」来形容活在当下移动互联网世界的人们。一个手机 App 可以让你足不出户&#xff0c;享受上百名厨师团队的服务&#xff0c;中饭想吃啥菜式、样品&#xff0c;输入框中一应俱全&#xff0c;光论规格&#xff0c;可能已超过…