第一篇文章介绍了使用原生的PHP和PHP的扩展库实现了爬虫技术。本文尝试使用PHP爬虫框架来写,首先对三种爬虫技术phpQuery,PHPcrawer, snoopy进行对比,然后分析模拟浏览器行为的方式,重点介绍下snoopy
所有代码挂在我的github上
1.几种常用的PHP爬虫框架对比
1.1 phpQuery
优势:类似jquery的强大搜索DOM的能力。
pq()是一个功能强大的搜索DOM的方法,跟jQuery的$()如出一辙,jQuery的选择器基本上都能使用在phpQuery上,只要把“.”变成“->”,Demo如下(对应我的github的Demo5)
1 |
|
1.2 PHPcrawer
优势:过滤能力比较强。
官方给的Demo如下(我的github中对应demo4):
1 |
|
1.3 snoopy
优势:提交表单,设置代理等
Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单,
demo如下(对应github中的demo3):
1 | include 'Snoopy/Snoopy.class.php'; |
1.4 phpspider
优势:安装配置到数据库
提供了安装配置,能够直接连接mysql数据库,使用也是比较广泛,这里我们暂时不单独介绍。
2.模拟用户行为
2.1 file_get_contents
1 |
|
2.2 curl
1 | $ch=curl_init(); //初始化一个cURL会话 |
2.3 snoopy
- 表单提交
我们的一个例子
form-demo.html
1 |
|
form-demo.php
1 |
|
提交表单1
2
3
4
5
6
7
8
9
10
include 'Snoopy/Snoopy.class.php';
$snoopy = new Snoopy();
$formvars["userName"] = "admin";
//userName 与服务器端/表单的name属性一致
$formvars["password"] = "admin";
$action = "http://localhost:8000/spider/demo3/form-demo.php";//表单提交地址
$snoopy->submit($action,$formvars);
echo $snoopy->results;
问题1:openssl extension required for HTTPS 增加对https的支持
1 | php.in ==> ;extension=php_openssl.dll 去除注释 |
问题2:405 Not Allowed增加
1 | $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器 |
问题3 : snoopy使用代理
1 | $snoopy->proxy_host = "http://www.icultivator.com"; |
问题:
其实尝试了网站进行提交表单是有问题的。这样简单的处理是不能提交表单的,使用代理也是有问题
的。snoopy框架确实会有很多问题,后面有解决思路了再说。
参考阅读: