phpspider 爬取汉谜网

1、相关文档

源码下载地址

phpspider官方文档(有时候会卡)

phpspider开发文档(不会卡)

2、常用配置参数

log_file:日志记录地址

max_fields:爬取的总条数,用于测试

domains:在配置的域名下抓取数据

scan_urls:抓取的起点,入口地址

list_url_regexes:列表页地址

content_url_regexes:详情页地址

3、当需要操作数据库时,数据库初始化

$spider->on_start = function($phpspider)
{$db_config = $phpspider->get_config("db_config");//print_r($db_config);//exit;// 数据库连接db::set_connect('default', $db_config);db::_init();
};

记得在最上方引入Db类

use phpspider\core\db;

4、常用回调方法

1)、处理每个获取到的字段

//处理每一个字段
$spider->on_extract_field = function($fieldname, $data, $page)
{if ($fieldname == 'url')    //给url字段重新赋值{$data = $page['request']['url'];}/*else if($fieldname == 'question'){}else if(){...}*/return $data;
};

2)、处理每一条获取到的记录

$spider->on_extract_page = function($page, $data)
{//根据分类,谜语名 过滤重复数据$category = $data['category'];$question = $data['question'];$sql = "Select * From `caimi` Where `category`='{$category}' and question = '{$question}'";$row = db::get_one($sql);if ($row)   //过滤重复数据{return false;}return $data;
};

5、代码

<?PHP
require_once __DIR__ . '/../autoloader.php';
use phpspider\core\phpspider;
use phpspider\core\db;/* Do NOT delete this comment */
/* 不要删除这段注释 *///根据URL组装配置路径
$caregoryArray = array ( 0 => array ( 'href' => '/njmy/', 'name' => '脑筋急转弯', ), 1 => array ( 'href' => '/zlmy/', 'name' => '智力问答', ), 2 => array ( 'href' => '/miyujingxuan/', 'name' => '谜语精选', ), 3 => array ( 'href' => '/mygs/', 'name' => '谜语故事', ), 4 => array ( 'href' => '/day/', 'name' => '谜语详解', ), 5 => array ( 'href' => '/new/', 'name' => '最新谜语', ), 6 => array ( 'href' => '/gxmy/', 'name' => '搞笑谜语', ), 7 => array ( 'href' => '/zmmy/', 'name' => '字谜', ), 8 => array ( 'href' => '/cymy/', 'name' => '成语谜语', ), 9 => array ( 'href' => '/dwmy/', 'name' => '动物谜语', ), 10 => array ( 'href' => '/aqmy/', 'name' => '爱情谜语', ), 11 => array ( 'href' => '/dmmy/', 'name' => '灯谜', ), 12 => array ( 'href' => '/rmmy/', 'name' => '人名谜语', ), 13 => array ( 'href' => '/dm/', 'name' => '地名谜语', ), 14 => array ( 'href' => '/cy/', 'name' => '词语谜语', ), 15 => array ( 'href' => '/dgmy/', 'name' => '带格谜语', ), 16 => array ( 'href' => '/ry/', 'name' => '用语谜语', ), 17 => array ( 'href' => '/etmy/', 'name' => '儿童谜语', ), 18 => array ( 'href' => '/wpmy/', 'name' => '物品谜语', ), 19 => array ( 'href' => '/zwmy/', 'name' => '植物谜语', ), 20 => array ( 'href' => '/jmmy/', 'name' => '诗词谜语', ), 21 => array ( 'href' => '/sbmy/', 'name' => '书报谜语', ), 22 => array ( 'href' => '/symy/', 'name' => '俗语谜语', ), 23 => array ( 'href' => '/ypmy/', 'name' => '药品谜语', ), 24 => array ( 'href' => '/yymy/', 'name' => '音乐谜语', ), 25 => array ( 'href' => '/ysmy/', 'name' => '影视谜语', ), 26 => array ( 'href' => '/cwmy/', 'name' => '称谓谜语', ), 27 => array ( 'href' => '/qita/', 'name' => '趣味谜语', ), );$scanUrls = $listUrlRegexes = $contentUrlRegexes = [];
foreach ($caregoryArray as $key => $value) {$href = $value['href'];$scanUrls[] = "http://www.cmiyu.com{$href}";$listUrlRegexes[] = "http://www.cmiyu.com{$href}my\d+.html";$contentUrlRegexes[] = "http://www.cmiyu.com{$href}\d+.html";
}//获取当前文件名
$fileName = basename(__FILE__);
$fileName = substr($fileName, 0, -4);   //文件名$configs = array('name' => '谜语大全', // 给你的爬虫起一个名字'log_show' => false, // 是否显示日志'log_file' => __DIR__ . "/../data/{$fileName}.log",  //记录日志地址'max_fields' => 3,   //最多爬取的条数,爬个3条意思一下'tasknum' => 1, // 开启多少个进程爬取// 数据库配置'db_config' => array('host'  => '127.0.0.1','port'  => 3306,'user'  => 'root','pass'  => '','name'  => 'test',  #数据库名),// 数据库表,表需要已存在,test库,test表'export' => array('type' => 'db','table' => 'caimi', #数据表名),// 爬取的域名列表'domains' => array('www.cmiyu.com'),// 抓取的起点'scan_urls' => $scanUrls/*array("http://www.cmiyu.com/gxmy/","http://www.cmiyu.com/wpmy/")*/,// 列表页实例,你要爬取的列表,也就是分页'list_url_regexes' => $listUrlRegexes/*array("http://www.cmiyu.com/gxmy/my\d+.html","http://www.cmiyu.com/wpmy/my\d+.html")*/,// 内容页实例,文章的内容页// \d+ 指的是变量,就是可变的参数'content_url_regexes' => $contentUrlRegexes/*array("http://www.cmiyu.com/gxmy/\d+.html","http://www.cmiyu.com/wpmy/\d+.html")*/,// 失败重新爬取次数'max_try' => 5,// 爬取规则配置'fields' => array(array('name' => "url",'selector' => "//div[@class='md']/h3[1]",   //先匹配question的值,然后在on_extract_field中处理该字段'required' => true,),array('name' => "question", // 数据库字段名'selector' => "//div[@class='md']/h3[1]",'required' => true, // 如果为空,整条数据丢弃),array('name' => "answer",'selector' => "//div[@class='md']/h3[2]",'required' => true,),array('name' => "category",'selector' => "//div[@class='weizhi']/a[2]",'required' => true,)),
);$spider = new phpspider($configs);$spider->on_start = function($phpspider)
{$db_config = $phpspider->get_config("db_config");//print_r($db_config);//exit;// 数据库连接db::set_connect('default', $db_config);db::_init();
};//处理每一个字段
$spider->on_extract_field = function($fieldname, $data, $page)
{if ($fieldname == 'url')    //给url字段重新赋值{$data = $page['request']['url'];}/*else if($fieldname == 'question'){}else if(){...}*/return $data;
};//处理每一条数据
$spider->on_extract_page = function($page, $data)
{//根据分类,谜语名 过滤重复数据$category = $data['category'];$question = $data['question'];$sql = "Select * From `caimi` Where `category`='{$category}' and question = '{$question}'";$row = db::get_one($sql);if ($row)   //过滤重复数据{return false;}return $data;
};$spider->start();

6、建表语句

CREATE TABLE `caimi` (`id` int(11) NOT NULL AUTO_INCREMENT,`category` varchar(20) DEFAULT '' COMMENT '谜语所属分类',`question` varchar(300) DEFAULT '' COMMENT '谜题',`answer` varchar(500) DEFAULT '' COMMENT '谜底',`url` varchar(100) DEFAULT '' COMMENT '每个谜语的路径',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

7、分析汉谜网入口,列表,详情 地址

8、执行

1)、在 \phpspider\demo\ 下新建一个文件 caimi.php

2)、把代码拷贝进去

3)、win + r 输入 cmd 打开 命令提示符

4)、指到 \phpspider\demo\ 目录下,以我的为例

切换一下盘符: e: 回车

指定到demo路径: cd E:\phpstormtest\phpspider\demo

5)、执行 caimi.php(需要配置一下PHP环境变量):php caimi.php

9、数据库结果查看

10、总结:

爬取这种有有规律,一次性页面数据加加载完了(没有Ajax请求的)的网站可以。

但是爬取那种异步加载页面信息,且参数加密 的网站 还不知道怎么整,哪位会的望不吝赐教。

phpspider 爬取汉谜网相关推荐

  1. python爬取中国天气网中国全部城市的天气链接

    近期自己尝试用python写一个qqbot实现天气查询功能,现已基本实现 已经基本完成爬取中国天气网的所有城市的天气情况链接 下附中国天气网所有城市的名称及对应链接 {'朝阳': 'http://ww ...

  2. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫

    导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...

  3. Python的scrapy之爬取顶点小说网的所有小说

    闲来无事用Python的scrapy框架练练手,爬取顶点小说网的所有小说的详细信息. 看一下网页的构造: tr标签里面的 td 使我们所要爬取的信息 下面是我们要爬取的二级页面 小说的简介信息: 下面 ...

  4. Scrapy实战篇(一)之爬取链家网成交房源数据(上)

    今天,我们就以链家网南京地区为例,来学习爬取链家网的成交房源数据. 这里推荐使用火狐浏览器,并且安装firebug和firepath两款插件,你会发现,这两款插件会给我们后续的数据提取带来很大的方便. ...

  5. python爬虫去哪儿网_大型爬虫案例:爬取去哪儿网

    世界那么大,我想去看看.相信每到暑假期间,就会有很多人都想去旅游.但是去哪里玩,没有攻略这又是个问题.这次作者给大家带来的是爬取去哪网自由行数据.先来讲解一下大概思路,我们去一个城市旅行必定有一个出发 ...

  6. 十一、练习:爬取图虫网付费图片

    十.练习:爬取图虫网免费图片 今天爬下图虫网付费的图片,比之前的免费图片简单. 这里的付费图片都是一个专辑的 这个我在一个公开课听的,说这个是:https://tuchong.com/rest/tag ...

  7. 用python输出所有的玫瑰花数_用Python爬取WordPress官网所有插件

    转自丘壑博客,转载注明出处 前言 只要是用WordPress的人或多或少都会装几个插件,可以用来丰富扩展WordPress的各种功能.围绕WordPress平台的插件和主题已经建立了一个独特的经济生态 ...

  8. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  9. python爬取千图网图片并保存_Python数据分析与挖掘实战-课程作业5爬取千图网某个频道的高清图片...

    作业要求:爬取千图网(http://www.58pic.com)某个频道的高清图片 作业难点:正确找到图片链接并用正则表达式写出 代码如下: """ Created on ...

  10. python爬取千图网_python爬取lol官网英雄图片代码

    python爬取lol官网英雄图片代码可以帮助用户对英雄联盟官网平台的皮肤图片进行抓取,有很多喜欢lol的玩家们想要官方的英雄图片当作自己的背景或者头像,可以使用这款软件为你爬取图片资源,操作很简单, ...

最新文章

  1. deep_ocr 是使得 OCR 比 tesseract 更好的中文识别、身份证识别等等
  2. php项目后的感受,PHP项目感受4 - 刘景刘恒的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 博客作业01-抽象数据类型
  4. oracle银行卡号检查约束,oracle约束学习(1)unique和check
  5. web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证
  6. python代码去马赛克_十行python代码教你如何去除万恶的,如s一样的马赛克
  7. leveldb学习:DBimpl
  8. 葵花8号卫星数据简介与下载(一)——数据介绍与FTP下载
  9. Linux-tftp、tftpd-pha安装、使用、配置教程
  10. 项目管理-PMP-第4章 项目范围管理
  11. python excel超链接_在Python中保留Pandas中的超链接 – Excel到数据帧
  12. 这也敢爬,你离牢饭不远了,爬虫逆向实战案例
  13. 取次花丛懒回顾,半缘修道半缘君
  14. 自学Java day12 使用jvav实现链表 从jvav到架构师
  15. yum安装报错:ImportError: No module named urlgrabber.grabber
  16. 6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我
  17. 一个好的肖像造型需要学习哪些3D建模知识?
  18. 基于MATLAB APP Designer 和 Python 的音视频剪辑App_02
  19. 浅谈WEBGIS运用栅格地图实现原理[更新:Google Maps带来的新型WebGIS设计模式]
  20. spring IOC DI AOP

热门文章

  1. Spark编程Tips
  2. python模板注入_Python 模板引擎的注入问题分析
  3. txt文件保存为Java_java实现写入并保存txt文件
  4. 连接定义点作用_【干货】我的期货交易入场点分析
  5. android模拟器参数设置,模拟器设置界面详解 - 新手引导 - 逍遥安卓论坛 - Powered by Discuz!...
  6. 世界第一台电脑_研发世界第一台电脑的核心人物,被美国隐瞒35年,只因他是个华人...
  7. 对比赛打分现场进行硬件连线的拓扑图_【评委计分系统-双屏版】参考硬件连线
  8. 轻云,云虚拟,ECS差别
  9. js 时间戮转换为日期格式
  10. rocketmq概念