【问题标题】:So, I want to crawl a webpage? [duplicate]那么,我想抓取一个网页? [复制]
【发布时间】:2011-08-09 17:18:57
【问题描述】:

可能的重复:
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>';
    }
}

【问题讨论】:

标签: php javascript ajax


【解决方案1】:

我最喜欢的用于浏览 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() 的原因。去做其他事情,让脚本运行。

【讨论】:

  • 实际使用DOM 而不是字符串解析的SimpleHtmlDom 的建议第三方替代方案:phpQueryZend_DomQueryPathFluentDom
  • 我正在拔头发试图让它发挥作用,我尝试了几种变体,但都没有结果。我不知道为什么它不起作用?我太接近了,有什么想法吗?我成功地让 http://poolga.com/artists 上的 href 工作但不在其中。
  • 查看我的解决方案的更新。没有你就不可能到达那里,谢谢你的帮助!
  • 已编辑;有一个拼写错误...不小心输入了 $inrefs 而不是 $inRefs。无论如何,执行时间很长,因为它要加载大量的网页。查看编辑评论。
  • 哈哈哈,刚注意到;我有 666 个代表 >:D
【解决方案2】:

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

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

(每个条目都位于&lt;div id="artists"&gt; 内的&lt;li&gt; 下)

然后您将必须阅读每个页面搜索元素 &lt;div id="artistSites"&gt;&lt;h2&gt; id="author"&gt;

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

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

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多