那么,我想抓取一个网页?

时间:2011-04-20 17:51:35

标签: php javascript ajax

  

可能重复:
  How to write a crawler?
  Best methods to parse HTML

我一直想知道如何做这样的事情。我不是网站的所有者/管理员/网站站长(http://poolga.com/),但我希望获得的信息是公开的。此页面(http://poolga.com/artists)是为该网站贡献的所有艺术家的目录。但是,此页面上的链接转到另一个页面,其中包含此锚标记,其中包含艺术家实际网站的链接。

<a id="author-url" class="helv" target="_blank" href="http://aaaghr.com/">http://aaaghr.com/</a>

我讨厌必须命令+点击目录中的链接,然后点击艺术家网站的链接。我希望有一种方法可以将一批10个艺术家网站链接显示为浏览中的标签,仅供临时查看。然而,将这些href变成某种阵列本身就是一项壮举。任何编程语言中的任何想法或方向/谷歌搜索都很棒!这甚至会被称为“爬行”吗?谢谢你的阅读!

更新

我使用这个脚本在我的本地php MAMP服务器上使用了Simple HTML DOM,花了一点时间!

$artistPages = array();
foreach(file_get_html('http://poolga.com/artists')->find('div#artists ol li a') as $element){
  array_push($artistPages,$element->href);
}

for ($counter = 0; $counter <= sizeof($artistPages)-1; $counter += 1) {
    foreach(file_get_html($artistPages[$counter])->find('a#author-url') as $element){
           echo $element->href . '<br>';
    }
}

2 个答案:

答案 0 :(得分:3)

我最喜欢的浏览dom的php库是Simple HTML DOM

set_time_limit(0);
$poolga = file_get_html('http://poolga.com/artists');
$inRefs = $poolga->find('div#artists ol li a');
$links = array();

foreach ($inRefs as $ref) {
    $site = file_get_html($ref->href);
    $links[] = $site->find('a#author-url', 0)->href;
}

print_r($links);

我认为代码非常明显。

编辑:有拼写错误。脚本需要花费很长时间才能完成,看看有多少链接;这就是我使用set_time_limit()的原因。去做其他的事情让脚本运行。

答案 1 :(得分:1)

使用一些函数循环播放艺术家子页面(以jQuery为例):

$("#artists li").each();

(每个条目都位于<li>内的<div id="artists">

然后,您必须阅读每个页面搜索元素<div id="artistSites"><h2> id="author">

$("#author a").href();

实施细节将取决于每个页面的不同程度。我只看了两个,所以它可能比这复杂一点。