PHPSpider使用记录-post方式抓取网页

来源:互联网 发布:spine mac 破解版 编辑:程序博客网 时间:2024/05/17 08:08

近来搜索发现PHP关于网络爬虫的框架,这里是https://doc.phpspider.org/文档说明。看了两天,还是没有看明白,就对比着demo做了一天实验,里面的注释代码有点影响阅读,不知被注释掉的代码是什么意思。

通过设置数据库配置,配置Php cmd环境,运行了里面的qiushibaike.php代码,确实能抓取数据。

因为我使用的是wampserver环境,不支持面板显示,看文档配置log_show=false,就能显示,捣鼓了半天也没有搞明白,后来看源代码才发现面板显示对win无效。

该框架仅支持php cli命令行执行,又在win环境下配置php路径,环境变量path添加了N遍都不起作用,后来把php路径往前设置了一下,就好用了,不知道是不是win对path设置项目有要求。

————————这里是分割线——————————

按照phpspider框架的要求,引入核心文件,设置内存

ini_set("memory_limit", "1024M");
require dirname(__FILE__).'/../core/init.php';

这里不得不说,文档里面的/* Do NOT delete this comment *//* 不要删除这段注释 */删除之后就die掉了,phpspider->start()要检测这两句是否存在,不存在就exit。

因此,使用phpspider写php,需要将内容复制到新文件中:

ini_set("memory_limit", "1024M");
require dirname(__FILE__).'/../core/init.php';

/* Do NOT delete this comment *//* 不要删除这段注释 */


设置configs参数,

domains必须设置//要抓取网站的域名

scan_urls必须设置//从这里的参数开始爬,如果没有,则直接exit

content_url_regexes必须设置,否则add_url(仅添加满足content_url_regexes或list_url_regexes正则的网址)

fields为要抓取数据的配置,其name值要与数据表字段名一直(按name值插入数据表),设置selector时,

通过phpspider调用selector:select方法,因此还需要设置select_type(必须设置,默认为xpath),

required设置为true时,则抓取不到字段内容时,则忽略不往数据库里面插入数据。

fields字段设置时,需设置export字段(抓取的数据如何保存)。

根据configs生成$spider对象   $spider = new phpspider($configs);

调用$spider->start()开始抓取网页;

start-流程:

判断参数,判断php环境是否支持

check_export()//检查导出设置

check_cache()

检查configs中scan_urls是否为空,

为空:exit

遍历scan_urls

判断每个入口url>is_scan_page//判断url域名与domains中域名是否一致

不一致:exit

日志、面板显示设置

初始化redis

/--url处置--/

添加入口url到队列

调用add_scan_url();

判断是否自定义on_start函数

调用on_start

...

开始采集

调用do_collect_page()

----do_collect_page---

调用collect_page()

---collect_page---

取Link = queue_rpop()//队列右侧出队列

uncompress(link)

取url = $link['url'];

调用request_url方法

---request_url---

提取link数组里面的method,调用requests::method

提取link数组里面的params,作为post参数

return $html

如果$html为空,return false

封装$page数组

判断是否自定义on_download_page函数//对page进行处理,并返回page

是否从当前页面抓取url-is_find_url=true//默认为true

判断当前页面类型:

scan_page

判断是否自定义on_scan_page自定义函数

传入page,content,phpspide到自定义函数

返回值给is_find_url

list_page

on_list_page

content_page

on_content_page

判断是否提取当前页面的url(is_find_url)

调用get_urls(content,url,..),添加url到队列

判断页面类型,如果是content_page

调用get_html_fields()

将抓取的fields字段导出

——————————分割线——————————

基本流程是这样,每抓取一个页面,提取数据,导出。

phpspider框架中,有两处代码错误

1、phpquery中515 hltml-》html

2、selector中187  _css_select中,phpQuery::loadDocumentHTML($html); 语句应该位于if语句外。

1 0
原创粉丝点击