前言

很多人在做网站的时候可能有这样的需求,前期网站内容不多需要从外站获取,需求量较大的时候,我们不可能手工进行转载。这时候“爬虫”显得尤为重要。下面就让我介绍在php下如何做一个“爬虫”。
前期我在做小程序的时候需要大量的关于电脑的文章(教程),自己打算写一个爬虫直接打算从网上爬取。由于自己的经验不足只单纯的利用了PHP的字符截取替换查找及正则表达式写了一个PHP爬虫,虽然最后达到了爬取的作用,但是因为使用这种方法只能针对具有一样排版的网站(或者说只适用于一个网站),所以当我需要获取其他网站内容时就需要重写算法。这极其不利于后期的维护。后来我想使用PYTHON爬虫获取内容然后入库,然后再用PHP去读,可是这样PYTHON也要和数据对接,这样也不利于维护。之后想到PY作为胶水语言,是不是可以和PHP一起使用呢?虽说可以,但是网上没有确切的解决办法,我也不想花时间去尝试PHP+PYTHON的方法。后面经过查找,找到了PHP中的爬虫类库QUERYLIST。有人可能会有疑问,调用这个类库就能后轻松的爬取内容了吗?我做个简单的比喻,PHP中的QueryList类库就相当于Python中的BS4(Beautiful Soup 4)模块。

QueryList类库

QueryList虽然可以让我们在PHP环境下轻松的爬取网站内容,但是在功能方面还是不如BS4,如果有特殊需求,建议使用Python BS4。

官方介绍

我们有时需要抓取一个网页的内容,但只需要特定部分的信息,通常会用正则来解决,这当然没有问题。正则是一个通用解决方案,但特定情况下,往往有更简单快 捷的方法。比如你想查询一个编程方面的问题,当然可以使用Google,但stackoverflow 作为一个专业的编程问答社区,会提供给你更多,更靠谱的答案。

对于html页面,不应该使用正则的原因主要有3个

1、编写条件表达式比较麻烦

尤其对于新手,看到一堆”不知所云”的字符评凑在一起,有种脑袋都要炸了的感觉。如果要分离的对象没有太明显的特征,正则写起来更是麻烦。

2、效率不高

对于php来说,正则应该是没有办法的办法,能通过字符串函数解决的,就不要劳烦正则了。用正则去处理一个30多k的文件,效率不敢保证。

3、有phpQuery

如果你使用过jQuery,想获取某个特定元素应该是轻而易举的事情,phpQuery让这成为了可能。

phpQuery
在介绍QueryList之前,有必要先来介绍一下phpQuery。

phpQuery是一个用php实现的类似jQuery的开源项目,可以在服务器端以jQuery的语法形式解析网页元素。

基本上jQuery的选择器都可以用在phpQuery上,phpQuery很强大可以对DOM进行任何复杂的操作,而接下来要介绍的QueryList则相当于phpQuery的子集,发挥它采集方面的强大功能。

QueryList
QueryList是一个基于phpQuery的PHP通用列表采集类,得益于phpQuery,让使用QueryList几乎没有任何学习成本,只要会CSS3选择器就可以轻松使用QueryList了,它让PHP做采集像jQuery选择元素一样简单。 QueryList的几个特点:

学习简单:只有一个核心的API
使用简单:用jQuery选择器来选择页面元素
自带过滤功能,可过滤掉无用的内容
支持无限层级嵌套采集
采集结果直接以采集规则以列表的形式有序的返回
支持扩展

下载安装使用

下载安装使用,请直接移步官方文档进行查看
官方文档

框架中使用QueryList

关于框架中使用的方法,官方给出的是THINKPHP3的教程,显然在现在来说THINKPHP3框架太老了,在我写这篇博文的时候THINKPHP框架已经更新到了5.1版本。QueryList官方提供的关于ThinkPHP3的使用方法在5中是不适用的。后期我会把这个补上,写一篇关于ThinkPHP5如何使用类库和QueryList在其中的一些使用技巧。(毕竟我也是刚接触到QueryList类库,需要一段时间的适应期,也希望有大佬可以指点。)

使用效果
  1. 网页原型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZapWNfea-1601773850327)(https://raw.githubusercontent.com/jae-jae/_resources/master/img/20181022153450.png)]

  1. 示例代码
<?phprequire 'vendor/autoload.php';use QL\QueryList;// 待采集的页面地址
$url = 'https://www.cnbeta.com/articles/tech/779841.htm';// 采集规则
$rules = [// 文章标题'title' => ['.title>h1','text'],// 发布日期'date' => ['.meta>span:eq(0)','text'],// 文章内容'content' => ['#artibody','html']
];$data = QueryList::Query($url,$rules)->data;print_r($data);
  1. 效果
Array
(Array
([0] => Array([title] => GitHub意外宕机 已确认数据存储系统存在问题[date] => 2018年10月22日 14:42[content] => <p style="text-align: center;"><img src="https://static.cnbetacdn.com/article/2018/1022/82e649adfde2e98.png" alt="github-down-due-to-data-storage-system-issue-523345-2.png"></p>
<p>发稿前,GitHub 已经排除了部分故障。目前似乎只有某些特定地区受到了影响,但欧洲等部分地区仍未完全恢复。</p>
<blockquote>
<p>GitHub 团队表示,数据存储系统是导致本次故障的罪魁祸首。为尽快恢复服务,他们正在努力修复。</p>
<p>过去的几个小时,所有工作都集中在这方面。在此期间,部分用户可能看到不一致的结果。</p>
</blockquote>
<p>今年早些时候,<a data-link="1" href="https://afflnk.microsoft.com/c/1251234/439031/7808" target="_blank">微软</a>宣布以 75 亿美元收购 GitHub 。近日,欧盟委员会认定微软接管 GitHub 不违背反竞争原则,并准予放行。</p>
<p>[编译自:<a href="https://news.softpedia.com/news/github-down-due-to-data-storage-system-issue-523345.shtml" target="_self">Softpedia</a>]</p>))
END

做PHP爬虫之QUERYLIST库(PHP爬虫插件)相关推荐

  1. Python网络爬虫之requests库Scrapy爬虫比较

    requests库Scrapy爬虫比较 相同点: 都可以进行页面请求和爬取,Python爬虫的两个重要技术路线 两者可用性都好,文档丰富,入门简单. 两者都没有处理JS,提交表单,应对验证码等功能(可 ...

  2. 【Python爬虫】Requests库网络爬虫实战

    1.京东商品页面爬取 打开某一个京东页面 https://item.jd.com/69336974189.html 代码: import requests url="https://item ...

  3. python爬虫基础-requests库

    python爬虫基础-requests库 python爬虫 1.什么是爬虫? 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程. 注意:浏览器抓取的数据对应的页面是一个完整的页面. 为什 ...

  4. python爬虫能干什么-爬虫可以做的事情非常多,Python的爬虫你又了解多少?

    原标题:爬虫可以做的事情非常多,Python的爬虫你又了解多少? 现在爬虫可以做的事情非常多,数据.信息.电影.资料等,你技术过关了,爱咋爬咋爬,仔细观察,加上你如果认真观察,就会发现学习爬虫的人越来 ...

  5. python爬虫之urllib库详解

    python爬虫之urllib库详解 前言 一.urllib库是什么? 二.urllib库的使用 urllib.request模块 urllib.parse模块 利用try-except,进行超时处理 ...

  6. python request库_【Python爬虫】Request库入门

    什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引. ...

  7. 【Python爬虫】Request库入门

    什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引. ...

  8. 基于爬虫+人脸识别库实现指定人物自动采集

    基于爬虫+人脸识别库实现指定人物自动采集 项目目的,为后面基于GAN的换脸大法做准备 更新 无需多张照片只需要一张原照就可以了 前言 如今大数据时代下的深度学习发展的火热,但是总是发现找不到合适的自己 ...

  9. 爬虫一 requests库与BeautifulSoup库、HTML

    安装requests库 方法是:在Mac电脑里打开终端软件(terminal),输入pip3 install requests,然后点击enter即可:Windows电脑里叫命令提示符(cmd),输入 ...

最新文章

  1. 【Redis】配置redis主从复制
  2. python中显示第三行数据_Python从零开始第三章数据处理与分析①python中的dplyr(1)...
  3. php大量数据库抽象,数据库的数据抽象有几个级别
  4. 跨境电商ERP系统怎么使用?
  5. 教你记录借还款,查看收支账户记录
  6. 华硕 小布 类似机器人_盘点足球赛事背后的高科技 华硕机器人小布化身观赛助理...
  7. matlab 函数提取某一项,Matlab——常用函数使用总结(部分直接从mathwork中提取并不断更新),的,用法,摘自,持续...
  8. 中国航天科技集团公司的各个研究院
  9. 百度地图有了这么有趣的功能
  10. 西南大学计算机学院导师,西南大学计算机与信息科学学院研究生导师简介-陈武...
  11. 全球最大的中文技术讨论区
  12. 以太网络(网口)变压器简介,功能,结构及典型的以太网网口电路
  13. 什么是百度搜索引擎关键词快速排名上首页?
  14. Monkey的11种事件
  15. 重构改善既有代码的设计(github源码)
  16. 全球及中国物流中心产业运营价值与投资可行性研究报告2022版
  17. L1-038 新世界 (5 分)C语言
  18. 计算机暑期学校心得,暑期学校学习心得体会
  19. 微信群管理机器人开发sdk
  20. html5手指测速,网速html5网速测试进度条代码

热门文章

  1. 计算机开机后发现不了硬盘 首先应该检查,联想台式电脑开机提示Error 1962没有检测到操作系统的解决方法...
  2. Java-对象相等判断
  3. 学习:双重差分模型DIDPSM-基于Stata实现
  4. Java简单的台球游戏(半成品)
  5. VS2003 安装错误
  6. 矩阵和矩阵转置求导公式
  7. 这些人都在使用超级表格
  8. 使用flex布局实现div垂直居中
  9. 关于开放自动化的思考:模型,协议与算法
  10. DSPF28335学习笔记