2009-05-04 58 views
63

Tôi muốn truy xuất mã HTML của liên kết (trang web) trong PHP. Ví dụ, nếu liên kết làLàm cách nào để lấy mã HTML của trang web bằng PHP?

https://stackoverflow.com/questions/ask

sau đó tôi muốn mã HTML của trang đó được phục vụ. Tôi muốn lấy mã HTML này và lưu trữ nó trong một biến PHP.

Làm thế nào tôi có thể làm điều này?

+0

Bạn có thể giải thích thêm về điều này không. Bạn muốn gửi yêu cầu web đến URL đã cho và đọc câu trả lời cho Biến tôi đoán? –

+0

Vâng, cùng một điều tôi muốn, tôi muốn toàn bộ mã nguồn trong một biến được trả về bởi yêu cầu web đó. – Prashant

+1

Bạn có thể sử dụng [công cụ này] (http://codecanyon.net/item/javascript-web-scraper/8598806) để dễ dàng xóa html. –

Trả lời

94

Nếu máy chủ PHP của bạn cho phép wrappers url fopen thì cách đơn giản nhất là:

$html = file_get_contents('http://stackoverflow.com/questions/ask'); 

Nếu bạn cần kiểm soát nhiều hơn thì bạn nên nhìn vào cURL chức năng:

$c = curl_init('http://stackoverflow.com/questions/ask'); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
//curl_setopt(... other options you want...) 

$html = curl_exec($c); 

if (curl_error($c)) 
    die(curl_error($c)); 

// Get the status code 
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 

curl_close($c); 
+0

Tôi lo lắng về 404. Trong trường hợp liên kết không tồn tại, sau đó tôi không muốn nội dung của nó, thay vào đó tôi muốn hiển thị một thông báo lỗi ?? Làm thế nào chúng ta sẽ thấy rằng url đang đưa ra lỗi 404 hay không (đơn giản là URL menas đang hoạt động hay không)? – Prashant

+1

@Prashant: Tôi đã chỉnh sửa để thêm một cuộc gọi curl_getinfo mà sẽ cung cấp cho bạn 200 hoặc 404 hoặc bất cứ điều gì – Greg

+0

Ngoài ra làm thế nào là nó có thể PHP có được trang HTML hiện tại? –

8

Cách đơn giản: Sử dụngfile_get_contents():

$page = file_get_contents('http://stackoverflow.com/questions/ask'); 

Xin lưu ý rằng allow_url_fopen phải true trong bạn php.ini để có thể sử dụng giấy gói fopen URL-aware.

More cách tiên tiến: Nếu bạn không thể thay đổi cấu hình PHP của bạn, allow_url_fopenfalse theo mặc định và nếu ext/curl được cài đặt, sử dụng cURL library để kết nối với các trang mong muốn.

10

Bạn có thể muốn kiểm tra các thư viện YQL từ Yahoo: http://developer.yahoo.com/yql

Nhiệm vụ trong tầm tay cũng đơn giản như

select * from html where url = 'http://stackoverflow.com/questions/ask' 

Bạn có thể thử này ra trong giao diện điều khiển tại địa chỉ: http://developer.yahoo.com/yql/console (yêu cầu đăng nhập)

Cũng thấy Chris Heilmanns thu hình màn ảnh đối với một số ý tưởng tốt đẹp gì hơn bạn có thể làm: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html

17

Ngoài ra, nếu bạn muốn thao tác với trang đã truy xuất bằng cách nào đó, bạn có thể muốn thử một số trình phân tích cú pháp php DOM. Tôi tìm thấy PHP Simple HTML DOM Parser rất dễ sử dụng.

1

bạn có thể sử dụng file_get_contents nếu bạn muốn lưu trữ nguồn dưới dạng biến tuy nhiên curl là thực tế tốt hơn.

$url = file_get_contents('http://example.com'); 
echo $url; 

giải pháp này sẽ hiển thị trang web trên trang web của bạn. Tuy nhiên curl là một lựa chọn tốt hơn.

0

Đây là hai khác nhau, cách đơn giản để có được nội dung từ URL:

1) phương pháp đầu tiên

Enable allow_url_include từ lưu trữ (php của bạn.ini hoặc một nơi nào)

<?php 
$variableee = readfile("http://example.com/"); 
echo $variableee; 
?> 

hoặc

2) Phương pháp thứ hai

Enable php_curl, php_imap và php_openssl

<?php 
// you can add anoother curl options too 
// see here - http://php.net/manual/en/function.curl-setopt.php 
function get_dataa($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

$variableee = get_dataa('http://example.com'); 
echo $variableee; 
?> 
Các vấn đề liên quan