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语句外。
- PHPSpider使用记录-post方式抓取网页
- 用Post方式抓取一个网页
- 用Post方式抓取一个网页
- C/C++使用POST方式进行抓取
- C#获取IP归属地【使用抓取网页内容方式】
- 抓取网页的两种方式.可直接使用
- 网页抓取三种方式
- 使用wget抓取网页
- 使用python抓取网页
- 使用lxml抓取网页
- 使用wget抓取网页
- pytyhon抓取网页内容get post方法
- CURL 抓取网页内容,模拟post
- java httpclient 抓取网页 POST GET
- 使用nodejs发起get或post请求抓取网页内容,支持中文编码
- C# POST 方式抓取页面的信息
- C++ POST方式访问网页
- C++ post方式请求网页
- 使用JsonConvert.DeserializeObject注意事项
- ORACLE 日期转换
- 新中新二代身份证读卡器C#开发问题及解决方法
- AndroidStudio导入新项目一直卡在Building gradle project
- 单链表的插入节点与删除节点
- PHPSpider使用记录-post方式抓取网页
- Linux环境下安装dubbo-admin
- Fetchjs 前后台交互简单运用
- linux socket 非阻塞模式进行连接
- 带权图的最小生成树 及其java实现
- linux的一些命令 -查看cc攻击-网口ip统计等
- 行式填报表利用JS函数实现批量删除功能
- Spring4 + Quartz-2.2.0集成实例
- hadoop join数据倾斜解决方法