2009-09-17 140 views
68

是否可以在任何指定網站上查找所有頁面和鏈接?我想輸入一個URL併產生一個來自該站點的所有鏈接的目錄樹?如何查找網站上的所有鏈接/頁面

我已經看過HTTrack,但下載整個網站,我只需要目錄樹。

+2

crawlmysite.in - 現場不存在 – 2015-10-20 07:40:33

回答

56

檢出linkchecker - 它將抓取該網站(同時服從robots.txt)並生成報告。從那裏,你可以編寫一個解決方案來創建目錄樹。

+0

非常感謝你Hank!完美 - 正是我需要的。非常感謝。 – 2009-09-17 15:08:05

+2

一個不錯的工具。我之前使用了「XENU link sleuth」。 Linkchecker更爲詳細。 – Mateng 2011-11-14 20:42:56

+0

我該怎麼做?以及如果網站中沒有robots.txt怎麼辦? – 2013-07-30 17:15:50

1

如果這是一個編程問題,那麼我建議你編寫自己的正則表達式來解析所有檢索到的內容。目標標籤是標準HTML的IMG和A.對於JAVA,

final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)"; 

這與模式和匹配器類一起應檢測標記的開始。如果您還想要CSS,請添加LINK標記。

然而,它並不像您想象的那麼容易。許多網頁的格式不正確。如果您需要考慮所有不規則表達式,通過編程提取所有鏈接,人類可以「識別」真的很困難。

祝你好運!

+13

No no no no,[不要用正則表達式解析HTML](http://stackoverflow.com/a/1732454/113632),它會讓Baby耶穌哭! – dimo414 2013-05-29 05:47:10

24

或者您可以使用Google來顯示它爲此域建立索引的所有頁面。例如:site:www.bbc.co.uk

+5

但如果您在Google中使用了額外的搜索功能,例如site,intitle,則會獲得700個條目的限制。即使在結果頁面的頂部,也說明了遠離700例如:約87,300結果(0.73秒) – Mbarry 2013-04-01 22:57:58

+1

@Mbarry,你怎麼知道這一點? – Pacerier 2015-04-06 13:46:24

+0

很容易知道。嘗試獲得30-50頁的搜索結果,您很快就會找到結果,而不是「site:www.bbc.co.uk」上的數千個結果。 – Zon 2016-04-07 15:23:04

-1
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; 
} 
try this code.... 
+6

雖然這個答案可能是正確和有用的,但如果您在解釋問題的過程中包含一些解釋並解釋它是如何有助於解決問題的話,那麼這是首選。如果存在導致其停止工作並且用戶需要了解其曾經工作的變化(可能不相關),這在未來變得特別有用。 – 2015-03-06 00:12:06

+1

呃,它有點**長。** – ElectroBit 2015-05-03 18:29:40

+1

完全沒有必要在php中以這種方式解析html。 http://php.net/manual/en/class.domdocument.php PHP確實能夠理解DOM! – JamesH 2015-06-26 12:30:11

23

如果你在瀏覽器的開發者控制檯(JavaScript的),你可以輸入這個代碼:

urls = document.querySelectorAll('a'); for (url in urls) console.log(urls[url].href); 

縮短:

​​
+0

那麼「Javascript-ed」網址呢? – Pacerier 2015-02-25 00:56:13

+0

喜歡什麼?你什麼意思? – ElectroBit 2015-04-03 20:53:48

+1

我的意思是使用Javascript完成的鏈接。你的解決方案不會顯示它。 – Pacerier 2015-04-06 13:45:53

相關問題