gpt4 book ai didi

php - 如何在 PHP 中制作一个简单的爬虫?

转载 作者:IT老高 更新时间:2023-10-28 12:01:18 24 4
gpt4 key购买 nike

我有一个包含大量链接的网页。我想编写一个脚本,将这些链接中包含的所有数据转储到本地文件中。

有人用 PHP 做过吗?一般准则和陷阱足以作为答案。

最佳答案

嗯。不要parse HTML with regexes .

这是一个受 Tatu 启发的 DOM 版本:

<?php
function crawl_page($url, $depth = 5)
{
static $seen = array();
if (isset($seen[$url]) || $depth === 0) {
return;
}

$seen[$url] = true;

$dom = new DOMDocument('1.0');
@$dom->loadHTMLFile($url);

$anchors = $dom->getElementsByTagName('a');
foreach ($anchors as $element) {
$href = $element->getAttribute('href');
if (0 !== strpos($href, 'http')) {
$path = '/' . ltrim($href, '/');
if (extension_loaded('http')) {
$href = http_build_url($url, array('path' => $path));
} else {
$parts = parse_url($url);
$href = $parts['scheme'] . '://';
if (isset($parts['user']) && isset($parts['pass'])) {
$href .= $parts['user'] . ':' . $parts['pass'] . '@';
}
$href .= $parts['host'];
if (isset($parts['port'])) {
$href .= ':' . $parts['port'];
}
$href .= dirname($parts['path'], 1).$path;
}
}
crawl_page($href, $depth - 1);
}
echo "URL:",$url,PHP_EOL,"CONTENT:",PHP_EOL,$dom->saveHTML(),PHP_EOL,PHP_EOL;
}
crawl_page("http://hobodave.com", 2);

编辑:我修复了 Tatu 版本的一些错误(现在适用于相对 URL)。

编辑:我添加了一个新功能,可以防止它两次访问同一个 URL。

编辑:现在将输出回显到 STDOUT,以便您可以将其重定向到您想要的任何文件

编辑:修复了 George 在回答中指出的错误。相对 url 将不再附加到 url 路径的末尾,而是覆盖它。感谢乔治。请注意,乔治的回答不考虑以下任何一项:https、用户、通行证或端口。如果您有 http加载 PECL 扩展很简单,使用 http_build_url .否则,我必须使用 parse_url 手动粘合在一起。再次感谢乔治。

关于php - 如何在 PHP 中制作一个简单的爬虫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com