検索
ホームページバックエンド開発PHPチュートリアルシンプルなオープンソースのPHPクローラーフレームワーク「Phpfetcher」

この記事は中水町で最初に公開されました: http://blog.reetsee.com/archives/366

携帯電話やコンピューターでより良い画像やコードを見たい場合は、元のアドレスにアクセスしてください。ブログ投稿。批判や修正も、ブログ投稿の元のアドレスで受け付けます。

??????????????????????????????


お久しぶりです!やっとまた日記を書きました。本当は載せたい日記がたくさんあったのですが、栄養にならない気がしたのでやめました。今日は主に、Phpfetcher という名前の単純な PHP クローラー フレームワークを共有します。 プロジェクトのアドレスは次のとおりです: https://github.com/fanfank/phpfetcher このフレームワークの作成者は、reetsee.xu です。これは水を吹くという意味です。プロジェクト全体をダウンロードした後、Linux 上のターミナルの demo フォルダーにある single_page.php を直接実行して、効果を確認します。ただし、デモ ファイルを実行する前に、文字化けの表示を避けるために、まず端末のエンコードを UTF-8 に設定してください。 ? ???? 0 背景

現在、Chuishui News (http://news.reetsee.com) のすべてのコンテンツは Python の Scrapy によってクロールされています。 News は現在、BAE (Baidu Application Engine) の下で実行されていますが、それでも毎月料金を支払う必要があります。私の現在のアイデアは、ニュースを現在の Alibaba Cloud ホストに完全に移行することであり、毎日手動でスクリプトを実行して、元のニュースをキャプチャし、Web サイトに更新します。ここに移行した後は、スクリプトのタイミングに Crontab を直接使用できます。ニュースを自動更新!最近、仕事で PHP を使用しています。PHP は、データベースを直接読み書きすることもできるので、ニュース Web サイトを再構築するためにも使用できます。作業を始めようとしたときに、適切な PHP クローラー フレームワークが見つからないことがわかりました (よく見ていなかったのかもしれません)。それで、自分で作成するつもりで、この Phpfetcher を思いつきました。名前は少し良くなりました...しかし、コードは少しわかりにくいです... とにかく、これで基本的に使用できるようになり、多くの簡単なニーズを満たすことができるはずです。使用例を次に示します。

1 基本概念

Phpfetcher には、順に Dom、Page、Crawler、Manager の 4 つの主要なオブジェクトがあります。

Dom オブジェクトは HTML を解析するために使用され、HTML 内の dom にアクセスできます。
  • Page オブジェクトは特定の HTML ページに対応し、Web ページ全体のコンテンツを取得できます。Pag​​e オブジェクトには Dom オブジェクトのメンバーがあります。
  • Crawler オブジェクトは、ページをクロールするためのルールを設定するために使用されるクローラー オブジェクトです。まだ実装されていないため、当面は役に立ちません
  • 実際の使用は主に Crawler オブジェクトを操作することです。 Phpfetcher では、基本クラスの要件を満たす限り、独自の Dom、Page、および Crawler を実装できます。 Phpfetcher のデフォルトの Page オブジェクトの Dom オブジェクトは simple_html_dom を使用し、PHP が提供する DOMDocument クラスを使用しないことに注意してください。これは、DOMDocument が HTML 形式のコンテンツと互換性が低いことが判明したためです。他のコンテンツが含まれている場合、Web ページが解析されない場合があります。が混ざっています。以下の図は、Phpfetcher のディレクトリ構造です。独自のニーズに応じて、必要な Crawler、Page、および Dom クラスをカスタマイズできます。デフォルトでは、Crawler のデフォルト クラスは Phpfetcher_Crawler_Default、Page のデフォルト クラスは Phpfetcher_Page_Default です。および Dom クラス デフォルトのクラスは Phpfetcher_Dom_SimpleHtmlDom です。クラス名とそれが配置されているパスの間には対応関係があります。デフォルトの Page オブジェクトを使用する場合は PHP のcurl ライブラリが必要であり、デフォルトの Crawler オブジェクトを使用する場合は PHP の mb_string ライブラリを使用する必要があることに注意してください。ない場合はインストールする必要があります。理解を容易にするために、いくつかの図を描きました。最初の図は、Phpfetcher の 3 つの主要なオブジェクト間の関係を示しています。図は、Crawler の Page オブジェクトと Page の Dom オブジェクトを示しています。 Phpfetcher を使用する場合、最も重要なことは、下の図の 2 つの緑色の四角形で必要なことを完了することです。つまり、Phpfetcher が提供する Crawler クラスを継承するクラスを作成し、handlePage( という関数を実装する必要があります)。独自のクラスの $page )関数。 $page パラメータは、Phpfetcher の Page クラス オブジェクトです。最後に、基本的なフローチャートを示します。上記の内容は少し曖昧なので、例を見てみましょう。
  • 2 簡単な例
  • ****** 例 1: single_page.php ******たとえば、次の Web サイトのコンテンツをクロールしたいとします: http://news.qq.com/a/20140927/ 026557.htm ハイパーリンク、タイトル、ニュースの詳細、その他関心のあるコンテンツが多数あります。次の例を見てみましょう:
    export LANG=en_US.UTF-8
    このスクリプトを「phpfetcher.php」および「Phpfetcher」フォルダと同じディレクトリに配置します (または、「phpfetcher.php」および「Phpfetcher」を PHP 環境のデフォルト インクルードに配置します) path) を指定してこのスクリプトを実行すると、得られる出力は次のとおりです。
    <?phprequire_once('phpfetcher.php');class mycrawler extends Phpfetcher_Crawler_Default {    public function handlePage($page) {        //打印处当前页面的title        $res = $page->sel('//title');        for ($i = 0; $i < count($res); ++$i) {            echo $res[$i]->plaintext;            echo "\n";        }    }}$crawler = new mycrawler();$arrJobs = array(    //任务的名字随便起,这里把名字叫qqnews    //the key is the name of a job, here names it qqnews    'qqnews' => array(         'start_page' => 'http://news.qq.com/a/20140927/026557.htm', //起始网页        'link_rules' => array(            /*             * 所有在这里列出的正则规则,只要能匹配到超链接,那么那条爬虫就会爬到那条超链接             * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches             */        ),        //爬虫从开始页面算起,最多爬取的深度,设置为1表示只爬取起始页面        //Crawler's max following depth, 1 stands for only crawl the start page        'max_depth' => 1,             ) ,   );//$crawler->setFetchJobs($arrJobs)->run(); 这一行的效果和下面两行的效果一样$crawler->setFetchJobs($arrJobs);$crawler->run();
    クロールした Web ページのソース コードを確認すると、次の行のタイトル タグの内容が抽出されていることがわかります。
    [root@reetsee demo]# php single_page.php 王思聪回应遭警方调查:带弓箭不犯法 我是绿箭侠_新闻_腾讯网
    上記は最も単純です。例。  ****** 实例2:multi_page.php ******接下来就是另外一个简单的例子,例如说腾讯新闻的主页,上面有各种新闻,我们这次的目标是把腾讯新闻主页( http://news.qq.com)显示的部分新闻标题抓下来,直接先上例程:
    <?php//下面两行使得这个项目被下载下来后本文件能直接运行$demo_include_path = dirname(__FILE__) . '/../';set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);require_once('phpfetcher.php');class mycrawler extends Phpfetcher_Crawler_Default {    public function handlePage($page) {        //打印处当前页面的第1个h1标题内荣(下标从0开始)        $strFirstH1 = trim($page->sel('//h1', 0)->plaintext);        if (!empty($strFirstH1)) {            echo $page->sel('//h1', 0)->plaintext;            echo "\n";        }    }}$crawler = new mycrawler();$arrJobs = array(    //任务的名字随便起,这里把名字叫qqnews    //the key is the name of a job, here names it qqnews    'qqnews' => array(         'start_page' => 'http://news.qq.com', //起始网页        'link_rules' => array(            /*             * 所有在这里列出的正则规则,只要能匹配到超链接,那么那条爬虫就会爬到那条超链接             * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches             */            '#news\.qq\.com/a/\d+/\d+\.htm$#',        ),        //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1        //Crawler's max following depth, 1 stands for only crawl the start page        'max_depth' => 2,             ) ,   );$crawler->setFetchJobs($arrJobs)->run(); //这一行的效果和下面两行的效果一样//$crawler->setFetchJobs($arrJobs);//$crawler->run();
    相比于第1个例子,变化的地方有几个:首先这次我们增加了一条爬虫跟踪的规则“#news\.qq\.com/a/\d+/\d+\.htm$#”(注:PHP使用pcre正则表达式,可以到 PHP关于正则表达式的页面看一下),这是一个正则表达式,例如这种超链接“news.qq.com/a/12345678/00234.htm”那么爬虫就会跟踪;然后是我们把爬虫的最大跟踪深度设置为2,这样爬虫会跟踪1次起始页面上符合要求的超级链接;最后是我把原本的Dom选择从“//title”改为了“//h1”,意思就是抓取h1标签的内容而不是像之前那样抓取title标签,想知道这种Dom选择器的选择规则,需要了解一下 xpath。运行这个文件,能够看到大致效果如下:   这样第二个例子就结束了。暂时我就介绍这两个例子吧,Phpfetcher的源代码在这里: https://github.com/fanfank/phpfetcher把代码下载下来后,demo内的东西就可以直接运行了(当然你需要一个有curl和mb_string扩展的php,可以使用“php -m”命令来看一下你的PHP有没有装这两个扩展)。

    3 后话

    实际上这个phpfetcher目前还有很多问题,性能应该是比较差的,不过毕竟也是我写的第一个框架。另外是关于phpfetcher我有很多东西还没有提到,例如Page对象的一些设置,Crawler对象的设置等,主要是目前太过懒不想写文档,也不知道有没有必要写。我感觉这个框架还是蛮简单的,里面主要的函数我都做了详细的注释,欢迎阅读批评指正给建议!最后就是,如果你想写个爬虫,又想用PHP来写,不妨试一下phpfetcher。 祝大家国庆节快乐~!  
  • 声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

    PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

    PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

    PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

    PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

    PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

    PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

    PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

    PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

    phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

    スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

    PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

    PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

    PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

    PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

    PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

    See all articles

    ホット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

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    SecLists

    SecLists

    SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境