PHP简单爬虫 基于QueryList采集库 和 ezsql数据库操作类
QueryList是一个基于phpQuery的PHP通用列表采集类,得益于phpQuery,让使用QueryList几乎没有任何学习成本,只要会CSS3选择器就可以轻松使用QueryList了,它让PHP做采集像jQuery选择元素一样简单。
官方地址:https://querylist.cc/
ezSQL PHP 是用php开发的一套轻量级的数据库类,这个数据库类占用服务器资源小,代码简洁,同时支持多种数据库的使用,安全性高。
下载地址:sjolzy.cn/php/ezSQL/bak/ez_sql_2.05.zip
搭建一个简单的框架目录结构:

db里放得是ezsql类相关文件
lib里放得是querylist相关文件
index.php 为主程序
以采集猫眼电影TOP100为例代码如下:
index.php
<?php
require 'lib/phpQuery.php';
require 'lib/QueryList.php';
require "db/shared/ez_sql_core.php";
require "db/mysql/ez_sql_mysql.php";
use QL\QueryList; //抓取猫眼电影TOP100榜单内容
$db = new ezSQL_mysql('root', 'root', 'spider', 'localhost');
$offset=;
for($i=;$i<;$i++){ $gurl="http://maoyan.com/board/4?offset=".$offset;
// echo $gurl.PHP_EOL;
$rules = array(
//采集id为one这个元素里面的纯文本内容
'url' => array('.movie-item-info .name a','href','',function($content){
return 'http://maoyan.com'.$content;
}),//链接
);
$data = QueryList::Query($gurl,$rules)->data;
// print_r($data);
foreach ($data as $key => $val) {
getContents($db,$val['url']);
}
$offset+=;
echo "弟".($i+)."页完成".PHP_EOL;
} //取电影内容 传入内容页的链接地址
function getContents($db,$url){
$rules = array(
//采集id为one这个元素里面的纯文本内容
'name' => array('.movie-brief-container .name','text'),//电影名
'ename' => array('.movie-brief-container .ename','text','',function($content){
return str_replace("'","\'",$content);
}),//英文名
'type' => array('.movie-brief-container ul li:eq(0)','text'),//电影类型
'area' => array('.movie-brief-container ul li:eq(1)','text','',function($content){
return trim(explode("/", $content)[]);
}),//产地
'timelen' => array('.movie-brief-container ul li:eq(1)','text','',function($content){
return trim(explode("/", $content)[]);
}),//片长 'addtime' => array('.movie-brief-container ul li:eq(2)','text','',function($content){
return substr($content,,);
}),//上映时间
'addarea' => array('.movie-brief-container ul li:eq(2)','text','',function($content){
return substr($content,);
}),//上映地点 ); $data = QueryList::Query($url,$rules)->data; print_r($data); $name=$data[]["name"];
$ename=$data[]["ename"];
$area=$data[]["area"];
$type=$data[]["type"];
$timelen=$data[]["timelen"];
$addtime=$data[]["addtime"];
$addarea=$data[]["addarea"]; $db->query("INSERT INTO maoyan (name, ename,type,area,timelen,addtime,addarea)
VALUES ('$name','$ename','$area','$type','$timelen','$addtime','$addarea')");
}
采集的结果:

项目下载:https://files.cnblogs.com/files/wordblog/spider.rar
PHP简单爬虫 基于QueryList采集库 和 ezsql数据库操作类的更多相关文章
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
- 一个简单的基于 DirectShow 的播放器 2(对话框类)
上篇文章分析了一个封装DirectShow各种接口的封装类(CDXGraph):一个简单的基于 DirectShow 的播放器 1(封装类) 本文继续上篇文章,分析一下调用这个封装类(CDXGrap ...
- 简单的php数据库操作类代码(增,删,改,查)
这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...
- 一个基于ASP.NET(C#)的ACCESS数据库操作类
using System; using System.Collections; using System.Collections.Specialized; using System.Data; usi ...
- mysql数据库基于linux的安装步骤及数据库操作
一.数据库安装 Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. sudo apt-get install mysql-server sudo apt-get isntall mysql ...
- 基于Confluent.Kafka实现的Kafka客户端操作类使用详解
一.引言 有段时间没有写东西了,当然不是没得写,还有MongoDB的系列没有写完呢,那个系列还要继续.今天正好是周末,有点时间,来写新东西吧.最近公司用了Kafka做为消息的中间件,最开始写的那个版本 ...
- 人生苦短_我用Python_pymysql库对Mysql数据库操作_009
# coding=utf-8 import pymysql ''' 数据库的登录信息: config={ 'host':'118.126.108.xxx', # :主机 'user':'python' ...
- C#利用反射+特性实现简单的实体映射数据库操作类
附上源代码: using System; using System.Collections.Generic; using System.Data; using System.Linq; using S ...
随机推荐
- [C/C++] 输入函数getline(cin,str) 与cin.getline(str,int)区别
cin.getline()函数是处理数组字符串的,其原型为cin.getline(char * , int),第一个参数为一个char指针,第二个参数为数组字符串长度. getline(cin,str ...
- VLD 无法打印堆栈调用情况
调试时遇到了一个比较郁闷的问题:同样一个MFC工程,复制之后无任何附加操作,VLD便无法正常打印内存泄漏处的堆栈调用了 百度了一下,重要找到了答案:“VLD不支持中文” 复制工程时windows自动在 ...
- iOS 一些常见问题
1.屏幕横屏时 xib上拖拉的控件不会跟着横过来: 是因为在主文件面里的 main interface 方框里的main 没有删除: 2.运行出现你没有权限 : 清理一下: 3.将对象转成字符串: / ...
- 【Java并发编程】之九:死锁
当线程需要同时持有多个锁时,有可能产生死锁.考虑如下情形: 线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2.接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B ...
- 【bzoj4031】[HEOI2015]小Z的房间 解题报告
[bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含\(n*m\)个格子的格状矩形,每个格子是一个房 ...
- 解题:NOI 2016 优秀的拆分
题面 其实题目不算很难,但是我调试的时候被玄学了,for循环里不写空格会RE,写了才能过.神**调了一个多小时是这么个不知道是什么的玩意(真事,可以问i207M=.=),心态爆炸 发现我们只要找AA或 ...
- 【位运算】判断一个数是否为2的n次方
import java.util.Scanner; /** * 功能:用位运算,判断一个数是否为2的n次方. * 思路:用1做移位操作,然后判断移位后的值是否与给定的数相同. */ public cl ...
- 利用ImageOps调整图片的Aspect Ratio(给图片添加borders)
# -*- coding: utf-8 -*- #******************** # 改变图片的纵横比(aspect retio) # 使用ImageOps.expand() # Image ...
- Python中hashlib模块
介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...
- day2 程序流程控制
流程控制:1.调用方法.调用方法将导致控制流程离开当前方法,转移到被调用的方法 2.选择.java中有两种做出选择的机制:if/else语句和switch语句.三目运算符可以看作是if/else的一个 ...