SORU
22 ŞUBAT 2010, PAZARTESİ


Nasıl PHP basit bir tarayıcı yapabilirim?

Bağlantıları bir grup ile bir web sayfası var. Yerel bir dosya tüm verileri bu bağlantıları bulunan döküm olan bir senaryo yazmak istiyorum.

Herkes PHP ile böyle bir şey yaptı? Genel kurallar ve frikiklerinden bir cevap olarak yeterli olacaktır.

CEVAP
22 ŞUBAT 2010, PAZARTESİ


Vıdı. parse HTML with regexes Don.

İşte DOM sürüm Tatu tarafından ilham:

<?php
function crawl_page($url, $depth = 5)
{
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    $seen[$url] = true;

    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');
        if (0 !== strpos($href, 'http')) {
            $path = '/' . ltrim($href, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                if (isset($parts['user']) && isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= $path;
            }
        }
        crawl_page($href, $depth - 1);
    }
    echo "URL:",$url,PHP_EOL,"CONTENT:",PHP_EOL,$dom->saveHTML(),PHP_EOL,PHP_EOL;
}
crawl_page("http://hobodave.com", 2);

Düzenleme:Tatu sürümü (göreceli URL ile çalışır) bazı hataları düzelttim.

Düzenleme:İki kez aynı adresi aşağıdaki engelleyen işlevselliği yeni bir şeyler ekledim.

Düzenleme:ne dosyası istiyorsun yönlendirebilirsiniz şimdi STDOUT yankılanan çıktı

Düzenleme:Sabit bir hata cevabı George ile dikkat çekti. Göreli URL, url artık yolun sonuna ekler, ancak üzerine. Bu George için teşekkürler. George cevap herhangi bir hesaba katmıyor unutmayın: https, kullanıcı, geçiş veya bağlantı noktası. http PECL uzantısı yüklü varsa, bu oldukça basit http_build_url kullanılarak yapılır. Aksi takdirde, el ile birlikte kullanarak parse_url tutkal var. Tekrar teşekkür ederim George.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008