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

シンプルなオープンソースのPHPクローラーフレームワーク「Phpfetcher」

Jun 23, 2016 pm 01:46 PM

この記事は中水町で最初に公開されました: 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 までご連絡ください。

    ホット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衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

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

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

    セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

    PHPのさまざまなエラータイプを説明します(通知、警告、致命的なエラー、解析エラー)。 PHPのさまざまなエラータイプを説明します(通知、警告、致命的なエラー、解析エラー)。 Apr 08, 2025 am 12:03 AM

    PHPには4つの主要なエラータイプがあります。1。notice:わずかなものは、未定義の変数へのアクセスなど、プログラムを中断しません。 2。警告:通知よりも深刻で、ファイルを含むなど、プログラムを終了しません。 3。ファタラー:最も深刻なのは、機能を呼び出すなど、プログラムを終了します。 4。ParseError:構文エラーは、エンドタグの追加を忘れるなど、プログラムの実行を防ぎます。

    PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

    PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

    HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか? HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか? Apr 09, 2025 am 12:09 AM

    HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

    PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

    PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

    アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

    PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

    PHP 7.4で導入された矢印関数(短い閉鎖)を説明します。 PHP 7.4で導入された矢印関数(短い閉鎖)を説明します。 Apr 06, 2025 am 12:01 AM

    矢印関数はPhp7.4で導入され、短い閉鎖の単純化された形式です。 1)=>演算子を使用して定義され、機能を省略し、キーワードを使用します。 2)矢印関数は、キーワードを使用せずに現在のスコープ変数を自動的にキャプチャします。 3)コールバック関数と短い計算でしばしば使用され、コードのシンプルさと読みやすさを改善します。

    PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

    PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

    See all articles