2010-12-12 77 views
21

cho trang web của tôi, tôi muốn thêm một chức năng mới.cách trích xuất liên kết và tiêu đề từ trang .html?

tôi muốn người dùng có thể tải lên tập tin sao lưu bookmark của mình (từ bất kỳ trình duyệt nếu có thể) để tôi có thể tải nó lên hồ sơ của họ và họ không cần phải chèn tất cả chúng bằng tay ...

phần duy nhất tôi đang thiếu để làm điều này đó là một phần của giải nén tiêu đề và URL từ các tập tin tải lên .. bất cứ ai có thể cung cấp cho một đầu mối nơi để bắt đầu hoặc nơi để đọc?

tùy chọn tìm kiếm được sử dụng và (how to extract data from a raw html file) sis này câu hỏi có liên quan nhất cho tôi và nó không nói về nó ..

tôi thực sự không quan tâm nếu nó sử dụng jquery hoặc php

cảm ơn bạn rất nhiều

+1

nó có lẽ sẽ giúp tất cả mọi người nếu bạn có thể đưa ra ví dụ về các loại bookmark file backup bạn muốn hỗ trợ (đối với mỗi trình duyệt) – scoates

+1

Định dạng Netscape là điểm chung: http://msdn.microsoft.com/en-us/library/aa753582(v=vs.85).aspx – Matthew

Trả lời

43

Cảm ơn bạn tất cả mọi người, tôi đã nhận nó!

Bộ luật cuối cùng: này cho bạn thấy neo văn bản phân công và href cho tất cả các liên kết trong một tập tin .html

$html = file_get_contents('bookmarks.html'); 
//Create a new DOM document 
$dom = new DOMDocument; 

//Parse the HTML. The @ is used to suppress any parsing errors 
//that will be thrown if the $html string isn't valid XHTML. 
@$dom->loadHTML($html); 

//Get all links. You could also use any other tag name here, 
//like 'img' or 'table', to extract other tags. 
$links = $dom->getElementsByTagName('a'); 

//Iterate over the extracted links and display their URLs 
foreach ($links as $link){ 
    //Extract and show the "href" attribute. 
    echo $link->nodeValue; 
    echo $link->getAttribute('href'), '<br>'; 
} 

Một lần nữa, cảm ơn rất nhiều.

30

Đây có lẽ là đủ:

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('a') as $node) 
{ 
    echo $node->nodeValue.': '.$node->getAttribute("href")."\n"; 
} 
+2

whre $ html đó là đường dẫn đến tệp? Cảm ơn bạn đã trả lời nhanh như vậy: D –

+2

@Toni, '$ html' là chuỗi chứa HTML. Bạn có thể sử dụng '$ dom-> loadHTMLFile()' để tải trực tiếp từ một tệp. (Bạn có thể muốn tiền tố nó bằng '@' để ngăn chặn các cảnh báo.) – Matthew

+0

wow! Cảm ơn nhiều! có vẻ như nó gần như đã hoàn tất! Tôi có thể nhận được liên kết nhưng tôi gặp khó khăn với tên hoặc chức danh (tôi đã thử cả hai) –

5

Giả sử các liên kết lưu trữ được trong một html nộp giải pháp tốt nhất có lẽ là t o sử dụng trình phân tích cú pháp html chẳng hạn như PHP Simple HTML DOM Parser (không bao giờ tự thử nó). (Tùy chọn khác là tìm kiếm bằng cách sử dụng tìm kiếm chuỗi cơ bản hoặc regexp và có lẽ bạn nên sử dụng không bao giờ sử dụng regexp để phân tích cú pháp html).

Sau khi đọc các tập tin html bằng quyền sử dụng phân tích cú pháp đó là chức năng để tìm ra a tags:

từ hướng dẫn:

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 
3

Đây là một ví dụ, bạn có thể sử dụng trong trường hợp của bạn này:

$content = file_get_contents('bookmarks.html'); 

Run này:

<?php 

$content = '<html> 

<title>Random Website I am Crawling</title> 

<body> 

Click <a href="http://clicklink.com">here</a> for foobar 

Another site is http://foobar.com 

</body> 

</html>'; 

$regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
$regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)[email protected])?"; // User and Pass 
$regex .= "([a-z0-9-.]*)\.([a-z]{2,4})"; // Host or IP 
$regex .= "(\:[0-9]{2,5})?"; // Port 
$regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path 
$regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
$regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor 


$matches = array(); //create array 
$pattern = "/$regex/"; 

preg_match_all($pattern, $content, $matches); 

print_r(array_values(array_unique($matches[0]))); 
echo "<br><br>"; 
echo implode("<br>", array_values(array_unique($matches[0]))); 

Output:

Array 
(
    [0] => http://clicklink.com 
    [1] => http://foobar.com 
) 

http://clicklink.com

http://foobar.com

1
$html = file_get_contents('your file path'); 

$dom = new DOMDocument; 

@$dom->loadHTML($html); 

$styles = $dom->getElementsByTagName('link'); 

$links = $dom->getElementsByTagName('a'); 

$scripts = $dom->getElementsByTagName('script'); 

foreach($styles as $style) 
{ 

    if($style->getAttribute('href')!="#") 

    { 
     echo $style->getAttribute('href'); 
     echo'<br>'; 
    } 
} 

foreach ($links as $link){ 

    if($link->getAttribute('href')!="#") 
    { 
     echo $link->getAttribute('href'); 
     echo'<br>'; 
    } 
} 

foreach($scripts as $script) 
{ 

     echo $script->getAttribute('src'); 
     echo'<br>'; 

} 
+0

Tạo kiểu không thành công và câu trả lời khó đọc. Vui lòng chỉnh sửa câu trả lời của bạn và làm cho câu trả lời dễ đọc hơn – michaldo

+1

Quá nhiều mã cho câu hỏi đã cho ... –

Các vấn đề liên quan