源码下载地址:https://github.com/owner888/phpspider

文档:https://doc.phpspider.org/

我的环境是宝塔lnmp,php是5.4版本,不要用这个版本,缺各种扩展库

错误1:没有该扩展,不需要再php.ini中配置

错误2:缺这个扩展库,不需要再php.ini中配置

跑跑的报这个错:PHP Fatal error:  Call to undefined function phpspider\core\mb_detect_encoding() in /www/wwwroot/wx.xiyang66.top/vendor/owner888/phpspider/core/requests.php on line 474

解决方法:执行 yum install php-mbstring -y

1、在linux上跑demo。

条件:linux上要有php环境,代码上传上去,执行php -f demo.php

想退出这个页面执行quit 或 ctrl + c

你可能会疑惑,这要跑,爬来的数据放到哪里了呢??

2、需要在$configs中加这俩个配置(参考文档configs详解之成员):

//日志存放的位置
'log_file' => './data/qiushibaike.log',
'export' => array('type' => 'csv','file' => './data/qiushibaike.csv', //爬下来的数据放在data目录下,目录和文件要自己提前创建好
)

这里是存成了csv需要下载到本地电脑上看,因为这是个excel还是下载下来方便看

当然你也可以存到数据库等

3、下面是一个完整的实例:

3.1、思路 :具体还是要看代码,思路只是方便理解和记忆

www.ncnews.com.cn //这个页面是网站首页
http://www.ncnews.com.cn/xwzx/ncxw/twnc/  //这个页面是列表页
http://www.ncnews.com.cn/xwzx/ncxw/twnc/index(_[0-9]{0,2})?.html //这个页面是列表页下面的页码

这回我们就清晰了,我们要爬取的是列表页的数据:

3.1.1、接下来设置爬取规则

3.1.2、实例化,将配置传给这个类的构造函数

3.1.3、添加新的url到带爬对列

3.1.4、筛选爬到的数据,如标题弄出来,内容弄出来,并组装好数据...

3.1.5、进行入库操作

3.2、代码

<?php
/*** http://blog.csdn.net/will5451/article/details/78999995?%3E* Created by PhpStorm.* User: Administrator* Date: 2018/2/1* Time: 22:51*/
require './vendor/autoload.php';
use phpspider\core\phpspider;
use phpspider\core\requests;    //请求类
use phpspider\core\selector;    //选择器类
use phpspider\core\db;    //选择器类
use phpspider\core\log;    //选择器类/* Do NOT delete this comment */
/* 不要删除这段注释 */$configs = array('name' => '爬取新闻',//'log_show' => true,//定义爬虫爬取哪些域名下的网页, 非域名下的url会被忽略以提高爬取速度'domains' => array('www.ncnews.com.cn'    //写域名),//定义爬虫的入口链接, 爬虫从这些链接开始爬取,同时这些链接也是监控爬虫所要监控的链接'scan_urls' => array('http://www.ncnews.com.cn/xwzx/ncxw/twnc/'),//定义内容页url的规则'content_url_regexes' => array("http://www.ncnews.com.cn/xwzx/ncxw/twnc/index(_[0-9]{0,2})?.html"),//爬虫爬取每个网页失败后尝试次数'max_try' => 5,//爬虫爬取数据导出'export' => array('type' => 'db','table'=> 'pachong',    //表名),'db_config' => array('host'  => 'localhost','port'  => 3306,'user'  => '改成自己的',    //mysql的账号'pass'  => '改成自己的',               //mysql的密码'name'  => '改成自己的',   //库名),'fields' => array(//从列表页开始爬array('name' => "lists",'selector' => "//div[contains(@id,'container')]//ul//li[contains(@class,'item')]",'required' => true,'repeated' => true  //写上是数组(抓的是整个列表页),不写是字符串(只抓第一个)),),//日志存放的位置'log_file' => 'data/qiushibaike.log',//只记录 错误和调试日志'log_type' => 'error,debug,warn,error',//爬虫爬取网页所使用的浏览器类型.随机浏览器类型,用于破解防采集'user_agent' => array("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36","Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1","Mozilla/5.0 (Linux; U; Android 6.0.1;zh_cn; Le X820 Build/FEXCNFN5801507014S) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/49.0.0.0 Mobile Safari/537.36 EUI Browser/5.8.015S",),//爬虫爬取网页所使用的伪IP。随机伪造IP,用于破解防采集'client_ip' => array('192.168.0.2','192.168.0.3','192.168.0.4',),);
$spider = new phpspider($configs);//爬虫初始化时调用, 用来指定一些爬取前的操作
$spider->on_start = function($spider)
{requests::set_header("Referer", "http://www.ncnews.com.cn/xwzx/ncxw/twnc/index.html");
};//在爬取到入口url的内容之后, 添加新的url到待爬队列之前调用. 主要用来发现新的待爬url, 并且能给新发现的url附加数据(点此查看“url附加数据”实例解析).
$spider->on_scan_page = function($page,$content,$spider){//列表页只采集3页。for($i=0;$i<3;$i++){if($i == 0){    //第一页$url = "http://www.ncnews.com.cn/xwzx/ncxw/twnc/index.html";}else{          //之后的n页$url = "http://www.ncnews.com.cn/xwzx/ncxw/twnc/index_{$i}.html";}$options = ['method' => 'get','params' => ['page' => $i],];$spider->add_url($url,$options);    //添加新的url到待爬队列}
};/*** 对匹配后的字段field进行回调处理* @param $filename* @param $data     * @param $page* @return array*/
$spider->on_extract_field = function($filename,$data,$page){$arr = [];//处理抽取到的fields中name == lists的数据if($filename == 'lists'){if(is_array($data)){foreach($data as $k=>$v){$img = selector::select($v,"//img");//如果该新闻没有图片,就删除这条数据if(empty($img)){unset($data[$k]);}else{$url = "http://www.ncnews.com.cn/xwzx/ncxw/twnc";$title = trim(selector::select($v,"//h3//a"));    //抓列表页的标题//抓列表页的图片if(substr(selector::select($v,"//img"),0,1)){$title_imgs = selector::select($v,"//img");}else{$title_imgs = $url . ltrim(selector::select($v,"//img"),'.');}$title_desc = trim(selector::select($v,"//h5"));    //抓列表页的新闻简介//抓文章,跳转到内容页$p = '/<h3><a[^<>]+href * \= *[\"\']?([^\'\"\+]).*?/i';$title_url = selector::select($v,$p,'regex');if(substr($title_url,0,1) == 'h'){$title_link = $title_url;}else{$title_link = $url . ltrim($title_url,'.');}$title_time = strip_tags(selector::select($v,"//h6"));  //抓列表页的时间//组装数据$arr[$k] = ['title' => $title,'title_imgs' => $title_imgs,'title_desc' => $title_desc,'title_link' => $title_link,    //前往内容页的链接'title_time' => $title_time,];}}}}return $arr;
};//入库操作
$spider->on_extract_page = function($page,$data){
//    echo "<pre>";
//    var_dump($data);
//    die;//处理哪个数据if(isset($data['lists'])){foreach($data['lists'] as $v){$arr = ['title' => trim($v['title']),'title_imgs' => urlencode($v['title_imgs']),'title_desc' => $v['title_desc'],'title_link' => urlencode($v['title_link']),'title_time' => $v['title_time']];//标题重复就不入库$sql  = "select count(*) as `count` from `pachong` where `title`".$v['title'];$row = db::get_one($sql);if(!$row['count']){db::insert('pachong',$arr);}}$data = $arr;}return $data;
};
$spider->start();

3.3、表的结构

4、按照作者的思想,每次爬取之前先要测试一下,该网站能不能爬到(参考文档:如何进行运行前测试)

注意:这是测试用的,该页面请用浏览器直接访问,方便查看

5、模拟登陆(参考文档:如何实现模拟登陆)注意:这是测试用的,该页面请用浏览器直接访问,方便查看

模拟登陆挖段子

模拟登陆知乎

附一篇:PHPSpider结合Fiddler查询HTTP CODE代码错误原因

*使用phpspider -- PHP蜘蛛爬虫框架来爬取数据相关推荐

  1. python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息

    原标题:python爬虫框架scrapy爬取梅花网资讯信息 一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息, ...

  2. Python数据分析:爬虫从网页爬取数据需要几步?

    对于数据分析师来说,数据获取通常有两种方式,一种是直接从系统本地获取数据,另一种是爬取网页上的数据,爬虫从网页爬取数据需要几步?总结下来,Python爬取网页数据需要发起请求.获取响应内容.解析数据. ...

  3. Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)

    文章目录 1.Scrapy注意点 2. Scrapy爬取豆瓣读书和评分 代码部分 数据定义items.py 爬虫部分spiders/book.py 数据存储部分pipelines.py 启动爬虫执行c ...

  4. JAVA爬虫框架WebMagic爬取ajax请求的页面数据

    查看WebMagic文档:http://webmagic.io/docs/zh/posts/ch1-overview/ 爬取网址需要翻墙: https://www.reddit.com/r/funny ...

  5. 【k哥爬虫普法】爬取数据是否一定构成不正当竞争?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  6. 用 Python 爬虫框架 Scrapy 爬取心目中的女神

    From :http://www.cnblogs.com/wanghzh/p/5824181.html 本博文将带领你从入门到精通爬虫框架 Scrapy,最终具备爬取任何网页的数据的能力. 本文以校花 ...

  7. Scrapy爬虫框架,爬取小说网的所有小说

    Scrapy入门教程请看 目录 1.思路清理 2.创建爬虫项目 3. 爬虫架构构思 4.爬虫程序具体分析 5.效果展示 6.待优化的地方 1.思路清理 我们的目的是把某个小说网的所有小说给拿下,这就涉 ...

  8. Java开源爬虫框架WebCollector—爬取新浪微博

    本教程给出了一个使用WebCollector模拟登陆并爬取新浪微博的示例.登录过程中会出现验证码.如图所示: 1.依赖jar包: 本教程需要两套jar包,WebCollector核心jar包和sele ...

  9. php 滑块 爬虫_phpspider爬虫框架如何爬取异步加载的数据?

    我找到些资料希望对楼主有所帮助 什么是异步加载? 向网站进行一次请求,一次只传部分数据.如:有些网页不需要点击下一页,其内容也可以源源不断地加载. 如何发现异步加载? 1.打开浏览器,右键选择&quo ...

  10. python爬取前程无忧_【Python】爬虫框架PySpider爬取前程无忧职位

    [Python] 纯文本查看 复制代码#!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2018-01-29 11:56:33 ...

最新文章

  1. JS验证框架的使用方法
  2. “苹果光环”褪色后,瑞声靠什么坐稳头把交椅?
  3. python3安装后无法使用退格键的问题
  4. 她穿着由自己17封拒稿信做成的裙子,通过了博士论文答辩!
  5. POI不同版本替换Word模板时的问题
  6. 取代Cookie失败,Google上线FLoC反遭“围攻”!
  7. rdd数据存内存 数据量_Spark 性能优化(二)——数据倾斜优化
  8. 在云上搭建大规模实时数据流处理系统
  9. 大学微积分考试能用计算机吗,AP微积分考试需要什么样的计算器?
  10. 去除win10桌面图标快捷方式小箭头
  11. ndoutils(ndo2db)安装部署
  12. 韦仕敦大学计算机科学,2020年西安大略大学有哪些优势专业
  13. event的用法—通知
  14. 超详细修改C盘下的用户名(适合win10和win11)
  15. 【转】卡马克快速平方根——平方根倒数算法
  16. 数据中台(七) 数据中台架构
  17. 第35篇 网络(五)获取本机网络信息
  18. html不同板块点击切换,板块快速切换的操作策略
  19. 轻而易举的为自己的网站插上opensocial开放平台的翅膀----这就是我们的梦想和实践
  20. 《资治通鉴》精读-治国之道的史学表达网课答案(中国人民大学)

热门文章

  1. java 数据可视化_8个可靠的开源数据可视化工具
  2. Layabox 1 layabox的项目文件以及项目配置
  3. oracle如何恢复被误误删除的pdb
  4. lcx端口转发及远程终端问题
  5. Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning 学习笔记
  6. 中国微流体系统市场趋势报告、技术动态创新及市场预测
  7. Android—Gradle教程(九)完结篇
  8. gradle教程java_Gradle教程系列 ——Gradle基本语法
  9. codesys写文件到远程并在远程读取文件
  10. 硬件驱动为什么要有WHQL数字签名