全国服务热线:400-6566-535 广州热线:020-82105691 客服QQ:858560031
后台演示 猪八戒 阿里巴巴商铺 手机版
网络营销电子商务建站知识编程知识行业资讯SEO知识常见问题网络安全
您当前位置: 首页 > 软件下载 > PHP爬虫类 PHP小偷类 PHP 复制网页类 下载

PHP爬虫类 PHP小偷类 PHP 复制网页类 下载

时间:2017-09-05 作者:七想网络

 

软件工具简介

 

第一篇文章介绍了使用原生的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
" .              "Cookie: foo=bar
"  )
);$context = stream_context_create($opts);/* Sends an http request to www.example.com   with 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 地址// 设置浏览器的特定

headercurl_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

<?phpinclude '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爬虫类 PHP小偷类 PHP 复制网页类 下载PHP爬虫类 PHP小偷类 PHP 复制网页类 下载

 

准备开展业务? 立即创建网站 或 成为代理商 或
网络营销
  1. 企业网站如何做好网站优化与推广工作?
  2. 中小企业怎样做网络营销 广州七想网络...
  3. 网络营销并不神秘,七想网络带您揭开秘...
  4. 透过优衣库事件 看网络营销?
  5. QQ营销推广技巧?
  6. 中小企业网站如何推广才有效果呢?