0

最初から注意しておきたいのは、コンテンツは著作権で保護されていないため、プロジェクトの目的でテキストを取得するプロセスを自動化したいと思います。

単純に設計されたWebサイトの各ページにある特定の繰り返しDIV(簡単にする場合は独自の「クラス」に起因する)からテキストを抽出したいと思います。

サイトには、私が望むコンテンツを含むすべてのページのリストを含む単一のアーカイブページがあります。

サイトはwww.zenhabits.netです。

これはある種のスクリプトで達成できると思いますが、どこから始めればよいのかわかりません。

助けていただければ幸いです。

-ネイサン。

4

2 に答える 2

0

SimpleHTMLDOMパーサースクリプトを使用してコンテンツを抽出することもできます。これは私が1。6年間使用した非常に便利なスクリプトです。スクリプトはhttp://simplehtmldom.sourceforge.net/からダウンロードできます。それは例で十分に文書化されています。これがあなたの問題を解決するのに役立つことを願っています。

于 2012-04-24T13:34:27.367 に答える
0

これは非常に簡単です。

まず、このサイトからすべてのリンクを取得し、それらをすべて配列にスローします。

set_time_limit(0);//this could take a while...

ignore_user_abort(true);//in case browser times out


$html_output=file_get_contents("http://zenhabits.net/archives/");

# -- Do a preg_match on the html, and grab all links:
if(preg_match_all('/<a href=\"http:\/\/zenhabits.net\/(.*)\">/',$html_output,$matches)) {
# -- Append Data To Array
foreach($matches[1] as $secLink) {  
    $links[] = "http://zenhabits.net/".$secLink;
}
    }

私はあなたのためにこれをテストしました、そして:

//first 3 are returning something weird, but you don't need them - so I shall remove them xD
unset($links[0]);
unset($links[1]);
unset($links[2]);

いいえ、これですべて完了です。これらのリンク($links配列内)をすべて調べて、その内容を確認してください。

foreach($links as $contLink){

$html_output_c=file_get_contents("$contLink");


    if(preg_match('|<div class=\"post\">(.*)</div>|s',$html_output_c,$c_matches)) {
    # -- Append Data To Array   
echo"data found <br>";
    $contentFromPage[] = $c_matches[1];
    }
else{echo "no content found in: $contLink -- <br><br><br>";}
}//end of foreach

基本的に、クローラースクリプト全体を作成しました。

そして今、コンテンツ配列をループし、それを使って好きなことをします(ここではそれをテキストファイルに入れます):

//$contentFromPage now contains all of div class="post" content (in an array) - so do what you want with it

    foreach($contentFromPage as $content){

    # -- We need a name for each text file --
$textName=rand()."_content_".rand().".txt";//we'll just use some numbers and text

//define file path (where you want the txt file to be saved)
$path="../";//we'll just put it in a folder above the script
$full_path=$path.$textName; 

// now save the file..

file_put_contents($full_path,$content);

//and that's it

    }//end of foreach
于 2012-04-24T13:19:52.250 に答える