เป็นไปได้ไหมที่จะค้นหาหน้าและลิงค์ทั้งหมดในเว็บไซต์ใด ๆ ฉันต้องการป้อน URL และสร้างแผนผังไดเรกทอรีของลิงก์ทั้งหมดจากไซต์นั้นหรือไม่
ฉันดู HTTrack แล้ว แต่มันดาวน์โหลดทั้งไซต์และฉันแค่ต้องการแผนผังไดเรกทอรี
เป็นไปได้ไหมที่จะค้นหาหน้าและลิงค์ทั้งหมดในเว็บไซต์ใด ๆ ฉันต้องการป้อน URL และสร้างแผนผังไดเรกทอรีของลิงก์ทั้งหมดจากไซต์นั้นหรือไม่
ฉันดู HTTrack แล้ว แต่มันดาวน์โหลดทั้งไซต์และฉันแค่ต้องการแผนผังไดเรกทอรี
คำตอบ:
ตรวจสอบตัวตรวจสอบลิงก์ - จะรวบรวมข้อมูลเว็บไซต์ (ขณะที่เชื่อฟัง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)
$$
ดำเนินการคืออะไร? หรือว่าเป็นเพียงชื่อฟังก์ชันที่กำหนดเองเหมือนกับ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)
หากนี่เป็นคำถามเกี่ยวกับการเขียนโปรแกรมฉันขอแนะนำให้คุณเขียนนิพจน์ทั่วไปของคุณเองเพื่อแยกวิเคราะห์เนื้อหาที่ดึงมาทั้งหมด แท็กเป้าหมายคือ IMG และ A สำหรับ HTML มาตรฐาน สำหรับ JAVA
final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";
สิ่งนี้พร้อมกับคลาส Pattern และ Matcher ควรตรวจพบจุดเริ่มต้นของแท็ก เพิ่มแท็ก LINK หากคุณต้องการ CSS
อย่างไรก็ตามมันไม่ง่ายอย่างที่คุณคิดในใจ หน้าเว็บหลายหน้ามีรูปแบบไม่ถูกต้อง การแยกลิงก์ทั้งหมดโดยใช้โปรแกรมที่มนุษย์สามารถ "รับรู้" นั้นเป็นเรื่องยากมากหากคุณต้องคำนึงถึงนิพจน์ที่ผิดปกติทั้งหมด
โชคดี!
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;
}
ลองใช้รหัสนี้ ....