先日、小説を連載するためのプログラムを作りました。更新の手間が怖かったので、八路中国語ネットワークから情報を収集するためにコレクターを作成しました。機能は比較的シンプルで、ルールはカスタマイズできません。ですが、一般的なアイデアはその中にあります。ルールは自分で拡張できます。
PHP をコレクターとして使用するには、主に file_get_contents() と preg_match_all() の 2 つの関数を使用します。前者は Web ページのコンテンツをリモートで読み取るためのものですが、後者は通常の関数です。必要なコンテンツを抽出するために使用されます。
それでは、関数の実装について順を追って説明していきます。
小説を収集しているため、最初に本のタイトル、著者、ジャンルを抽出する必要があります。その他の情報は必要に応じて抽出できます。
ここでの目標は「明王朝に戻って王子になる」ことです。まず参考文献ページを開いて、リンク: http://www.86zw.com/Book/3727/Index.aspx
詳細 いくつかの本を開くと、本のタイトルの基本的な形式が http://www.86zw.com/Book/书号/Index.aspx であることがわかります。したがって、スタート ページを作成して、 <入力タイプ=テキスト名=番号>を定義し、収集が必要な書籍番号を入力するために使用されます。今後、収集が必要な書籍番号は $_POST['番号' の形式で受信できるようになります。 ]。書籍番号を受け取ったら、次に参考文献ページを作成します: $url=http://www.86zw.com/Book/$_POST['number']/Index.aspx もちろん、これはです。簡単に説明すると、$_POST['number'] の正当性を実際に作成するときに確認するのが最善です。
URL を構築したら、書籍情報の収集を開始できます。 file_get_contents() 関数を使用して書誌ページ $content=file_get_contents($url) を開き、書誌ページのすべてのコンテンツを読み取れるようにします。次のステップは、本のタイトル、著者、ジャンルなどの情報を照合することです。ここでは本のタイトルを例に挙げますが、それ以外はすべて同じです。 参考文献ページを開いてソース ファイルを表示し、「「明朝に戻って王子になる」」を見つけます。これは、対象となる本のタイトルです。抽出された。本のタイトルを抽出するための正規表現: /(.*?)/ の場合は、preg_match_all() 関数を使用して本のタイトルを抽出します: preg_match_all("/< span class ="newstitle">(.*?)/is",$contents,$title); このように、$title[0][0] の内容が必要なタイトルになります ( preg_match_all 関数の使用方法は、Baidu にアクセスして確認できます。ここでは詳しく説明しません)。書籍情報を取得したら、次のステップは章のコンテンツを取得することです。章のコンテンツを取得するには、まず各章のアドレスを見つけて、リモートで章を開き、通常のルールを使用してコンテンツを取得します。それをデータベースに保存するか、HTML 静的ファイルを直接生成します。これは章リストのアドレスです: http://www.86zw.com/Html/Book/18/3727/List.shtm これは参考文献ページと同じであり、次のルールがあることがわかります。 http://www.86zw.com/Html/Book/分類番号/書籍番号/List.shtm で見つかります。書籍番号は事前に取得されています。ここで重要なのは、分類番号を見つけることです。分類番号は、
preg_match_all("/Html/Book/[) で確認できます。 0-9]{1,} /[0-9]{1,}/List.shtm/is",$contents,$typeid); これだけでは不十分なので、cut 関数も必要です:
PHPコードは次のとおりです。
function Cut ($string,$start,$end){
$message =explode($start,$string);
$message =explode($end, $message[1]); return $message[0] ;} ここで、$string は切り取られるコンテンツ、$start は開始点、$end は終了点です。分類番号を取得します:
$start = "Html/Book/";
$end
= "List.shtm"; 0 ],$start,$end);
$typeid =explode("/",$typeid);[/php]
このように、$typeid[0] が分類番号になります。を探しています。次のステップは、章リストのアドレスを構築することです: $chapterurl = http://www.86zw.com/Html/Book/.$typeid[0]/$_POST[‘number’]/List.shtm。これで各章のアドレスがわかります。メソッドは次のとおりです:
$ustart = """;
$uend
= """;
//t は title
$tstart = " の省略形を表します。 >";
$tend
= "<";
//パスを取得します。例: 123.shtm,2342.shtm,233.shtm
preg_match_all("/"[ 0-9]{1 ,}.(shtm)"/is",$chapterurl,$url);
//タイトルを取得します。例: 第 1 章 善良な人々の 9 つの世界
preg_match_all(" //is",$file,$title);
$count = count($url [0]);
for( $i=0;$i{
$u = Cut($url[0][$i],$ustart, $uend);
$t = カット($title[0][$i],$tstart,$tend);
$array[$u] = $t; 🎜> $array 配列はすべてのチャプターアドレスです この時点で、コレクターは半分完了し、各チャプターアドレスをループして読み取り、内容を照合します。これは比較的単純なので、ここでは詳しく説明しません。さて、今日はこれで終わりにしましょう。これほど長い記事を書くのは初めてなので、言葉の整理に問題があることは避けられません。