第一篇文章介绍了使用原生的PHP和PHP的扩展库实现了爬虫技术。本文尝试使用PHP爬虫框架来写,首先对三种爬虫技术phpQuery,PHPcrawer, snoopy进行对比,然后分析模拟浏览器行为的方式,重点介绍下snoopy

所有代码挂在我的github上

1.几种常用的PHP爬虫框架对比

1.1 phpQuery

优势:类似jquery的强大搜索DOM的能力。
pq()是一个功能强大的搜索DOM的方法,跟jQuery的$()如出一辙,jQuery的选择器基本上都能使用在phpQuery上,只要把“.”变成“->”,Demo如下(对应我的github的Demo5)

<?php require('phpQuery/phpQuery.php');phpQuery::newDocumentFile('http://www.baidu.com/'); $menu_a = pq("a"); foreach($menu_a as $a){echo pq($a)->html()."<br>";} foreach($menu_a as $a){echo pq($a)->attr("href")."<br>";}
?>

1.2 PHPcrawer

优势:过滤能力比较强。
官方给的Demo如下(我的github中对应demo4):

<?php include("PHPCrawl/libs/PHPCrawler.class.php");class MyCrawler extends PHPCrawler { function handleDocumentInfo(PHPCrawlerDocumentInfo $PageInfo) { // As example we just print out the URL of the document echo $PageInfo->url."<br>"; } }$crawler = new MyCrawler(); $crawler->setURL("www.baidu.com"); $crawler->addURLFilterRule("#\.(jpg|gif)$# i");//过滤到含有这些图片格式的URL$crawler->go();?>

1.3 snoopy

优势:提交表单,设置代理等
Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单,
demo如下(对应github中的demo3):

include 'Snoopy/Snoopy.class.php';
$snoopy = new Snoopy();
$url = "http://www.baidu.com";
// $snoopy->fetch($url);
// $snoopy->fetchtext($url);//去除HTML标签和其他的无关数据
$snoopy->fetchform($url);//只获取表单
//只返回网页中链接 默认情况下,相对链接将自动补全,转换成完整的URL。
// $snoopy->fetchlinks($url);
var_dump($snoopy->results);

1.4 phpspider

优势:安装配置到数据库
提供了安装配置,能够直接连接mysql数据库,使用也是比较广泛,这里我们暂时不单独介绍。

2.模拟用户行为

2.1 file_get_contents

<?php
$opts = array('http'=>array('method'=>"GET",'header'=>"Accept-language: en\r\n" ."Cookie: foo=bar\r\n")
);$context = stream_context_create($opts);/* Sends an http request to www.example.comwith additional headers shown above */
$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>

2.2 curl

$ch=curl_init();  //初始化一个cURL会话
curl_setopt($ch,CURLOPT_URL,$url);//设置需要获取的 URL 地址
// 设置浏览器的特定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: www.baidu.com","Connection: keep-alive","Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Upgrade-Insecure-Requests: 1","DNT:1","Accept-Language: zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4,en-US;q=0.2","Cookie:_za=4540d427-eee1-435a-a533-66ecd8676d7d;"
));
$result=curl_exec($ch);//执行一个cURL会话

2.3 snoopy

  • 表单提交

我们的一个例子
form-demo.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>form-demo</title>
</head>
<body><form action="./form-demo.php" method="post">用户名:<input type="text" name="userName"><br>密 码:<input type="password" name="password"><br><input type="submit"></form>
</body>
</html>

form-demo.php

<?php $userName = $_POST['userName'];$password = $_POST['password'];if($userName==="admin"&&$password==="admin"){echo "hello admin";}else{echo "login error";}?>```
提交表单
```php
<?php
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;
?><div class="se-preview-section-delimiter"></div>

问题1:openssl extension required for HTTPS 增加对https的支持

php.in ==> ;extension=php_openssl.dll 去除注释<div class="se-preview-section-delimiter"></div>

问题2:405 Not Allowed增加

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器
$snoopy->referer = "http://www.icultivator.com"; //伪装来源页地址 http_referer
$snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息
$snoopy->rawheaders["X_FORWARDED_FOR"] = "122.0.74.166"; //伪装ip<div class="se-preview-section-delimiter"></div>

问题3 : snoopy使用代理

$snoopy->proxy_host = "http://www.icultivator.com";
// HTTPS connections over proxy are currently not supported
$snoopy->proxy_port = "8080"; //使用代理
$snoopy->maxredirs = 2; //重定向次数
$snoopy->expandlinks = true; //是否补全链接 在采集的时候经常用到
$snoopy->maxframes = 5; //允许的最大框架数

问题:
其实尝试了网站进行提交表单是有问题的。这样简单的处理是不能提交表单的,使用代理也是有问题
的。snoopy框架确实会有很多问题,后面有解决思路了再说。

参考阅读:
- cURL、file_get_contents、snoopy.class.php 优缺点
- 开源中国-PHP爬虫框架列表
- phpQuery
- Snoopy下载地址
- Snoopy —— 强大的PHP采集类使用详解及示例:采集、模拟登录及伪装浏览器
- 开源中国-snoopy博客列表

PHP爬虫最全总结2-phpQuery,PHPcrawer,snoopy框架中文介绍相关推荐

  1. PHP爬虫最全总结-phpQuery,PHPcrawer,snoopy框架中文介绍

    1.几种常用的PHP爬虫框架对比 1.1 phpQuery 优势:类似jquery的强大搜索DOM的能力. pq()是一个功能强大的搜索DOM的方法,跟jQuery的$()如出一辙,jQuery的选择 ...

  2. 爬虫、网页测试 及 java servlet 测试框架等介绍

    scrapy 抓取网页并存入 mongodb的完整示例: https://github.com/rmax/scrapy-redis https://github.com/geekan/scrapy-e ...

  3. 最近用.NET实现DHT爬虫,全.NET实现

    最近用.NET实现DHT爬虫,全.NET实现,大家可以加我QQ交流下  309159808 转载于:https://www.cnblogs.com/oshoh/p/9236186.html

  4. python 爬虫+selenium 全自动化下载JS动态加载漫画

    ** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...

  5. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  6. 幼儿园课程体系结构图_全人教育、均衡发展课程体系介绍

    原标题:全人教育.均衡发展课程体系介绍 一.<世界大百科之中国>全人教育均衡发展示意图 二.<世界大百科之中国>全人教育均衡发展课程简介 幼儿园课程是实现幼儿园教育的手段与目的 ...

  7. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  8. Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  9. 全链通“铭镜”农产品溯源平台介绍分析

    id:BSN_2021 公众号:BSN研习社 作为分布式存储.加密算法.共识机制的集成融合创新技术,区块链具备诸多优越性能.金融.政务.公益.农业等,各行各业都能使用区块链. 农产品溯源,一方面,它是 ...

  10. 分布式网络爬虫框架Cola介绍

    分布式网络爬虫框架Cola介绍        这个分布式网络爬虫框架设计思想来源于: https://github.com/chineking/cola/wiki        下面给出框架设计图: ...

最新文章

  1. 让Web开发者事半功倍的8个网站
  2. boost::system模块实现动态链接库的测试程序
  3. android 生成debug.keystore,android sdk 如何重新生成debug.keystore
  4. 18 ubuntu 远程原生_CNCF公布中国云原生调查报告:49%使用容器技术,Kubernetes 应用率达 72%...
  5. OpenShift 4.6 新特性 - 用 Windows MachineConfig Operator 管理 Windows Container
  6. leetcode954. Array of Doubled Pairs
  7. leetcode 1446 连续字符
  8. 求一个数的二进制逆序之后所对应的数
  9. QuickHit游戏
  10. 国内外优秀音视频博客
  11. Rust: codewars 的Duplicate Encoder
  12. Android开发经典书籍下载——《Android 4高级编程》《疯狂Android讲义》《Android应用开发详解(郭宏志)》《Android应用案例开发大全》《Android 3D游戏开发技术》
  13. iOS开发文档(中文)
  14. 一个字由两个字节组成
  15. VLAN链路类型和接口类型
  16. 安装drupal9报错
  17. 蜻蜓飞过,从此智能硬件厂商有了儿童梦工厂
  18. 小牛电动IPO:四年跌宕起伏 一代天才少年李一男终圆梦
  19. CSS3精灵(Sprites)技术
  20. python爬虫笔记五:汽车之家贴吧信息(字体反爬-动态映射)

热门文章

  1. 线性系统和非线性系统——《应用非线性动力学》读书笔记
  2. BP(BackPropagation)神经网络算法详解
  3. 专业卸载工具Your Uninstaller! Pro
  4. Xen虚拟化环境安装和常用命令
  5. 科来网络分析器11下载地址
  6. logit和logistic模型
  7. 海量数据处理的方法总结
  8. DirectShow Samples
  9. 十大进销存软件排行榜 免费进销存软件推荐 进销存软件什么好用
  10. ETL数据抽取 全量 增量