【发布时间】:2010-11-29 04:29:30
【问题描述】:
是否可以在任何给定网站上找到所有页面和链接?我想输入一个 URL 并生成一个包含该站点所有链接的目录树?
我查看了 HTTrack,但它会下载整个站点,我只需要目录树。
【问题讨论】:
-
crawlmysite.in - 网站不存在
标签: directory web-crawler
是否可以在任何给定网站上找到所有页面和链接?我想输入一个 URL 并生成一个包含该站点所有链接的目录树?
我查看了 HTTrack,但它会下载整个站点,我只需要目录树。
【问题讨论】:
标签: directory web-crawler
查看linkchecker——它会爬取网站(同时服从robots.txt)并生成报告。从那里,您可以编写用于创建目录树的解决方案。
【讨论】:
robots.txt 文件,那只是意味着你可以爬到你心中的内容。
如果您的浏览器中有开发者控制台 (JavaScript),您可以在以下位置键入此代码:
urls = document.querySelectorAll('a'); for (url in urls) console.log(urls[url].href);
缩短:
n=$$('a');for(u in n)console.log(n[u].href)
【讨论】:
$$ 运算符是什么?或者只是an arbitrary function name, 与n=ABC(''a'); 相同我不明白urls 如何获取所有'a' 标记元素。你可以解释吗?我假设它不是 jQuery。我们在说什么原型库函数?
$$() 基本上是document.querySelectorAll() 的简写。此链接的更多信息:developer.mozilla.org/en-US/docs/Web/API/Document/…
另一种选择可能是
Array.from(document.querySelectorAll("a")).map(x => x.href)
$$( 更短
Array.from($$("a")).map(x => x.href)
【讨论】:
如果这是一个编程问题,那么我建议您编写自己的正则表达式来解析所有检索到的内容。目标标签是标准 HTML 的 IMG 和 A。对于 JAVA,
final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";
这与 Pattern 和 Matcher 类一起应该检测标签的开头。如果您还想要 CSS,请添加 LINK 标记。
但是,这并不像您最初想象的那么容易。许多网页格式不正确。如果您需要考虑所有不规则表达式,那么以编程方式提取人类可以“识别”的所有链接真的很困难。
祝你好运!
【讨论】:
function getalllinks($url) {
$links = array();
if ($fp = fopen($url, 'r')) {
$content = '';
while ($line = fread($fp, 1024)) {
$content. = $line;
}
}
$textLen = strlen($content);
if ($textLen > 10) {
$startPos = 0;
$valid = true;
while ($valid) {
$spos = strpos($content, '<a ', $startPos);
if ($spos < $startPos) $valid = false;
$spos = strpos($content, 'href', $spos);
$spos = strpos($content, '"', $spos) + 1;
$epos = strpos($content, '"', $spos);
$startPos = $epos;
$link = substr($content, $spos, $epos - $spos);
if (strpos($link, 'http://') !== false) $links[] = $link;
}
}
return $links;
}
试试这个代码....
【讨论】: