从网站上多个页面上发生的DIV中提取文本,然后输出到.txt?

时间:2012-04-24 09:58:57

标签: php html web web-crawler

从一开始就注意到,内容不受版权保护,我希望自动化为项目目的获取文本的过程。

我想从一个特定的,经常性的DIV中提取文本(,它归因于它自己的'类',以防止它更容易)坐在每个页面上的简单设计网站。

网站上有一个存档页面,其中包含包含我想要的内容的所有页面的列表。

该网站是www.zenhabits.net

我想这可以用某种脚本来实现,但不知道从哪里开始。

我感谢任何帮助。

-Nathan。

2 个答案:

答案 0 :(得分: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]);

不,这一切都已完成,有时间浏览所有这些链接(在数组$链接中),并获取其内容:

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

答案 1 :(得分:0)

您也可以使用SimpleHTML DOM Parser脚本来提取内容。这是一个非常有用的脚本,我用了1。6年。您可以从http://simplehtmldom.sourceforge.net/下载脚本。通过示例对其进行了详细记录。希望这能帮助您解决问题。