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

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

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

 

软件工具简介

 

第一篇文章介绍了使用原生的PHP和PHP的扩展库实现了爬虫技术。


本文尝试使用PHP爬虫框架来写,首先对三种爬虫技术phpQueryPHPcrawer

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. 中小企业网站如何推广才有效果呢?