目次
クラスメソッド
クラス属性 (デフォルト値は括弧内にあります)
デモ
ホームページ バックエンド開発 PHPチュートリアル PHP のクローリングとコレクション クラスの概要 snoopy_PHP チュートリアル

PHP のクローリングとコレクション クラスの概要 snoopy_PHP チュートリアル

Jul 13, 2016 am 10:33 AM
php クロール

snoopy は、Web ブラウザーの機能を模倣するために使用される php クラスで、Web コンテンツの取得とフォームの送信のタスクを完了できます。公式サイト http://snoopy.sourceforge.net/

スヌーピーのいくつかの特徴:

  • Web ページのコンテンツを取得する fetch()
  • Web ページのテキストコンテンツを取得します (HTML タグを削除します) fetchtext()
  • Web ページのリンクを取得し、 fetchlinks() fetchform() を作成します
  • プロキシホストをサポート
  • 基本的なユーザー名/パスワードの検証をサポートします
  • user_agent、リファラー(ソース)、Cookie、ヘッダーコンテンツ(ヘッダーファイル)の設定​​をサポート
  • ブラウザのリダイレクトをサポートし、リダイレクトの深さを制御できます
  • Web ページ内のリンクを高品質の URL に展開できます (デフォルト)
  • データを送信して戻り値を取得する
  • 追跡HTMLフレームワークをサポート
  • リダイレクト時の Cookie の受け渡しをサポート

php4以降が必要です。 PHP クラスであるため、サポートを拡張する必要はありません。サーバーがcurlをサポートしていない場合に最適です。

クラスメソッド

1.フェッチ($uri)

これは、Web ページのコンテンツをクロールするために使用される方法です。 $URI パラメータは、クロールされた Web ページの URL アドレスです。取得した結果は $this->results に保存されます。

フレームをスクレイピングしている場合、スヌーピーは各フレームを追跡して配列に保存し、$this->results に保存します。

リーリー

2. フェッチテキスト($URI)

このメソッドは fetch() に似ています。唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のテキスト コンテンツのみを返すことです。

リーリー

3. フェッチフォーム($URI)

このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページのフォーム コンテンツ (フォーム) のみを返すことです。

リーリー

4. リンクの取得($URI)

このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。

リーリー

5. 送信($URI,$formvars)

このメソッドは、$URL で指定されたリンク アドレスに確認フォームを送信します。 $formvars はフォームパラメータを格納する配列です。

リーリー

6. 送信テキスト($URI,$formvars)

このメソッドは submit() に似ていますが、唯一の違いは、このメソッドは HTML タグやその他の無関係なデータを削除し、ログイン後に Web ページ内のテキスト コンテンツのみを返すことです。

リーリー

7.リンクの送信($URI)

このメソッドは submit() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。

リーリー

クラス属性 (デフォルト値は括弧内にあります)

  • $host 接続されているホスト
  • $port 接続するポート
  • $proxy_host 使用されるプロキシ ホスト (存在する場合)
  • $proxy_port 使用されるプロキシ ホスト ポート (存在する場合)
  • $agent ユーザーエージェント変装 (スヌーピー v0.1)
  • $リファラールーティング情報(利用可能な場合)
  • $cookies クッキー (ある場合)
  • $rawheaders その他のヘッダー情報 (ある場合)
  • $maxredirs リダイレクトの最大数、0=許可されません (5)
  • $offsiteok オフサイトへのリダイレクトを許可するかどうか (true)
  • $expandlinks 完全なアドレスへのすべてのリンクを完了するかどうか (true)
  • $user 認証のユーザー名 (利用可能な場合)
  • $pass 認証ユーザー名 (可能な場合)
  • $accept http 受け入れタイプ (image/gif、image/x-xbitmap、image/jpeg、image/pjpeg、*/*)
  • $error エラーがある場合、どこに報告されますか
  • $response_code サーバーから返されたレスポンス コード
  • $headers サーバーから返されたヘッダー情報
  • $maxlength 返されるデータの最長長
  • $read_timeout 読み取り操作のタイムアウト (PHP 4 Beta 4+ が必要)、タイムアウトなしの場合は 0 に設定します
  • $timed_out 読み取り操作がタイムアウトすると、この属性は true を返します (PHP 4 Beta 4+ が必要)
  • $maxframes 追跡できる最大フレーム数
  • $status キャプチャされた http
  • のステータス
  • $temp_dir Web サーバーが書き込むことができる一時ファイル ディレクトリ (/tmp)
  • $curl_path cURL バイナリ ディレクトリ。cURL バイナリがない場合は false に設定します

デモ

リーリー

指定された URL コンテンツを取得します:

リーリー

フォーム送信:

リーリー

フォームが送信されたので、さまざまなことができるようになります。次に、IP とブラウザを偽装しましょう:

リーリー

セッションを偽装したり、ブラウザを偽装したり、IP を偽装したりできることがわかりました。笑、たくさんのことができます。たとえば、確認コードを持参して IP を確認して投票すると、ノンストップで投票できます。

追記: ここでの IP の偽装は、実際には http ヘッダーの偽装であるため、REMOTE_ADDR を通じて取得した IP は偽装できません。逆に、http ヘッダー (プロキシを防止できる種類) を通じて IP を取得した人は、独自の IP を作成できます。 。

关于如何验证码 ,简单说下:首先用普通的浏览器, 查看页面 , 找到验证码所对应的sessionid,同时记下sessionid和验证码值,接下来就用snoopy去伪造 。

原理:由于是同一个sessionid 所以取得的验证码和第一次输入的是一样的。

有时我们可能需要伪造更多的东西,snoopy完全为我们想到了:

<?php
$snoopy->proxy_host = "http://www.bkjia.com/librarys/veda/";
$snoopy->proxy_port = "8080"; //使用代理
$snoopy->maxredirs = 2; //重定向次数
$snoopy->expandlinks = true; //是否补全链接 在采集的时候经常用到
// 例如链接为 /images/taoav.gif 可改为它的全链接 http://www.4wei.cn/images/taoav.gif
$snoopy->maxframes = 5 //允许的最大框架数
//注意抓取框架的时候 $snoopy->results 返回的是一个数组
$snoopy->error //返回报错信息
?>
ログイン後にコピー

比较完整的示例:

/**
* You need the snoopy.class.php from 
* http://snoopy.sourceforge.net/
*/
include("snoopy.class.php");
 
$snoopy = new Snoopy;
// need an proxy?:
//$snoopy->proxy_host = "my.proxy.host";
//$snoopy->proxy_port = "8080";
 
// set browser and referer:
$snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$snoopy->referer = "http://www.jonasjohn.de/";
 
// set some cookies:
$snoopy->cookies["SessionID"] = '238472834723489';
$snoopy->cookies["favoriteColor"] = "blue";
 
// set an raw-header:
$snoopy->rawheaders["Pragma"] = "no-cache";
 
// set some internal variables:
$snoopy->maxredirs = 2;
$snoopy->offsiteok = false;
$snoopy->expandlinks = false;
 
// set username and password (optional)
//$snoopy->user = "joe";
//$snoopy->pass = "bloe";
 
// fetch the text of the website www.google.com:
if($snoopy->fetchtext("http://www.google.com")){ 
    // other methods: fetch, fetchform, fetchlinks, submittext and submitlinks
 
    // response code:
    print "response code: ".$snoopy->response_code."<br/>n";
 
    // print the headers:
 
    print "<b>Headers:</b><br/>";
    while(list($key,$val) = each($snoopy->headers)){
        print $key.": ".$val."<br/>n";
    }
 
    print "<br/>n";
 
    // print the texts of the website:
    print htmlspecialchars($snoopy->results)."n";
}
else {
    print "Snoopy: error while fetching document: ".$snoopy->error."n";
}
ログイン後にコピー

用Snoopy类完成一个简单的图片采集:

<meta http-equiv='content-type' content='text/html;charset=utf-8'>
<?php    
include 'Snoopy.class.php';   //加载Snoopy类     
$snoopy = new Snoopy();       //实例化一个对象
$sourceURL = "http://www.bkjia.com/librarys/veda/";    //要抓取的网页
$snoopy->fetchlinks($sourceURL);        //获得网页的链接
$a = $snoopy->results;     //得到网页链接的结果
$re = "/d+.html$/";     //匹配的正则
//过滤获取指定的文件地址请求  
foreach ($a as $tmp) { 
	if (preg_match($re, $tmp)) {
		$aa=$tmp;        
 	}    
}  
getImgURL($aa);
function getImgURL($siteName) 
{        
 	$snoopy = new Snoopy();        
 	$snoopy->fetch($siteName);                
 	$fileContent = $snoopy->results;    //获取过滤后的页面的内容            
 	//匹配图片的正则表达式        
 	$reTag = "/<img[^s]+src="(http://[^"]+).(jpg|png|gif|jpeg)"[^/]*/>/i";                
	if (preg_match($reTag, $fileContent)) {  
   		//过滤图片
		$ret = preg_match_all($reTag, $fileContent, $matchResult);                     
		for ($i = 0, $len = count($matchResult[1]); $i < $len; ++$i) 
		{      
			saveImgURL($matchResult[1][$i], $matchResult[2][$i]);            
		}        
	}    
}        
function saveImgURL($name, $suffix) { 
	$url = $name.".".$suffix;                
 	echo "请求的图片地址:".$url."<br/>";                
 	$imgSavePath = "E:/123/images/";  //图片保存地址      
 	$imgId =mt_rand(); //产生一个随机的文件名
 	if ($suffix == "gif") { 
		//根据图片类型,放入不同的文件夹下面           
  		$imgSavePath .= "emotion";        
 	} 
	else 
	{            
  		$imgSavePath .= "topic";        
 	}        
 	$imgSavePath .= ("/".$imgId.".".$suffix);  //组装要保存的文件名
 	if (is_file($imgSavePath)) {   
		//判断文件名是否存在,存在则删除         
  		unlink($imgSavePath);            
  		echo "<p style='color:#f00;'>文件".$imgSavePath."已存在,将被删除</p>";        
 	}  
 	$imgFile = file_get_contents($url); //读取网络文件     
 	$flag = file_put_contents($imgSavePath,$imgFile);   //写入到本地 
 	if ($flag) {            
  		echo "<p>文件".$imgSavePath."保存成功</p>";        
 	}    
}
?>
ログイン後にコピー

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752536.htmlTechArticlesnoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。官方网站 http://snoopy.sourceforge.net/ Snoopy的一些功能...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles