PHP kullanarak HTML indirmek için?

8 Cevap php

PHP nasıl bir URL'den bir HTML dosyasını indirmek ve CSS ve Görüntüler gibi tüm bağımlılıkları indirmek ve dosyaları gibi benim sunucuya bu saklamak? Ben çok fazla soruyorum?

8 Cevap

Bunu yapmanın en kolay yolu kullanmak olacaktır wget. Bu özyinelemeli HTML ve bağımlılıkları indirebilirsiniz. aksi takdirde kendinizi html ayrıştırma olacak. Saf php yapıyor ilgili ayrıntılar için Yacoby cevabını bakın.

Ben her şeyi basitleştirmek için bir html ayrıştırma kitaplığı kullanarak öneriyoruz. Yani şey gibi Simple HTML DOM.

Basit HTML DOM kullanarak:

$html = file_get_html('http://www.google.com/');
foreach($html->find('img') as $element){
    //download image
}

Dosya indirme (ve html) için ben file_get_contents kullanarak üzerinde çok daha fazla kontrol sağlar gibi, gibi kıvrılma gibi bir HTTP sarıcı kullanarak öneriyoruz. Eğer file_get_contents kullanmak istedi, ancak bazı good examples URL'leri almak için nasıl php sitede vardır.

Daha karmaşık bir yöntem Eğer kullanıcı Ajan kurmak istiyorsa yararlı olabilir başlıklarını, belirlemenizi sağlar. (Diğer siteleri bir çok kazıma iseniz yönetici engelleme daha iyi çok fazla bant genişliği, kullanıyorsanız, web sitenizi ya da temas noktası Admin izin kullanmak gibi, bir özel kullanıcı ajan olması iyidir senin IP adresi).

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n"
  )
);

$context = stream_context_create($opts);
$file = file_get_contents('http://www.example.com/', false, $context);

: Elbette bu sadece yapılabilir rağmen

$file = file_get_contents('http://www.example.com/');

Eğer bakmak istiyorum kütüphanesi cURL with PHP. cURL HTTP istekleri ile ilgili eylemleri gerçekleştirir (ve diğer ağ protokolleri, ama ben HTTP en çok kullanılan bahse girerim.) Siz GET / POST değişkenleri ile birlikte, HTTP çerezleri ayarlayabilirsiniz.

Ben otomatik bağımlılıkları karşıdan tam olarak emin değilim - Eğer indirmek HTML IMG / LINK etiketleri ayrıştırmak, ve sonra bu bağımlılıkları almak için tekrar cURL kullanmanız gerekebilir.

Bunun için nasıl orada bir bazillion dersler vardır. Here's a simple example libcurl yapmak (PHP'nin cURL bağlamaları dayandığı) insanlardan temel bir HTTP GET isteği için (alt kısmına gidin):

<?php
//
// A very simple example that gets a HTTP page.
//

$ch = curl_init();

curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/");
curl_setopt ($ch, CURLOPT_HEADER, 0);

curl_exec ($ch);

curl_close ($ch);
?>

PHP için kıvırmak sarma bakmak olabilir: http://us.php.net/manual/en/book.curl.php

Bildiğim kadarıyla bağımlılıkları gibi, sen probably <script src="..."> gibi şeyler için bakmak bazı düzenli ifadeler kullanarak bu bir sürü alabilir, ancak uygun bir (X) HTML çözümleyici sizi daha anlamlı travers izin istiyorum DOM.

Perls Mechanize bu çok iyi yapar. Bu soruya cevap olarak mechanize gibi ama PHP için de benzer bir görev yapan bir kütüphane var:

http://stackoverflow.com/questions/199045/is-there-a-php-equivalent-of-perls-wwwmechanize

Ben seçeneklerin çoğu PHP ve ekran kazıma SO sorular kaplıdır düşünüyorum.

for example how to implement a web scraper in php or how do i implement a screen scraper in php

Ben sadece bir ekran kazıyıcı daha istiyorum farkındayım, ama bu sorular senin cevap olacağını düşünüyorum.

Ekran kazıma burada en iyi cevap olabilir.

Ne muhtemelen yapmak istediğiniz bir vurduğunuzda SimpleXML HTML ayrıştırmak için kullanmak, ve bir

<img>

veya

<script>

etiketi, SRC parametresi okumak ve bu dosyayı indirin.