Bütün bir sayfadaki bağlantıları ve kaç aynı sayfada bu bağlantı yeniden (biz nasıl ki php yapabilirsiniz?)

4 Cevap

Ben (bir url sağlanan) sayfası üzerinden gitmek istiyorum ve bağlantıları ve aynı sayfaya bağlantı bağlantıların sayısının sayısını dönecekti küçük bir PHP işlevi yazmak çalışıyorum. Ben bir URL olarak google.com sağlamak ise Örneğin, google.com orada kaç bağlantıları dönmek gerekir ve kaç bağlantıları, www.google.com, google.com tabii dahil (google.com geri google bağlantı. com / #, vb)

Bunu yapmak kolay mı, ben bunu nasıl yaparım?

(Bu yüzden mümkün olduğu kadar yardım lütfen bir ödev soru DEĞİLDİR

Eğer ben soru ile ne demek hakkında daha fazla bilgiye ihtiyacınız varsa, sadece daha fazla bilgi sağlamak yapmak bana sor

4 Cevap

I SimpleXml veya DOM bu görev için öneririm, ama bunlar geçersiz biçimlendirme şok edecek ve ne yazık ki, web çoğunluğu hala [(2)] {geçersiz biçimlendirme kullanıyor } senin soru sözü. Bu URL'leri HTML alıp tidy onları, ama aynı zamanda kullanabileceğiniz olabilir SimpleHTML

$links = array('inbound' => array(),
               'outbound' => array());

$url  = 'http://www.example.com';
$host = parse_url($url, PHP_URL_HOST);    
$html = file_get_html($url);
foreach($html->findElementsByTagName('a') as $link) {
    $linkHost = parse_url($link->href, PHP_URL_HOST);
    $type     = ($linkHost === $host) ? 'inbound' : 'outbound';
    $links[$type][] = $link->href;
}

print_r($links);

Please note that I do not have SimpleHTML installed atm, so the above might not work out of the box. It should point you into the right direction though.


EDIT

Ah, ben gerçekten bu yazdı mı? Ben sarhoş muydu? Ve neden kimse bu konuda şikayet etmedi? Kendimi düzeltmek için:

Eğer loadHTML() yöntemi kullanırsanız DOM kırık HTML cezası yönetir. SimpleXML değil. SimpleHtmlDom ile önerilen çözüm muhtemelen çalışacaktır, ancak IMO SimpleHTMLDom berbat. Iyi üçüncü parti kütüphaneler bulunabilir Best Methods to parse HTML.

Bir değişkene sayfa içeriğini yükleyin:

$html = file_get_contents("http://www.somesite.com"); 

ve $ html üzerinde) (a preg_match yapmak

o biri için php manuel kontrol.

http://www.php.net/manual/en/function.preg-match.php

http://php.net/manual/en/book.simplexml.php

Sen bir sayfadaki tüm bağlantıları bulmak için SimpleXML kullanın ve sonra onlar için aradıklarını maç olmadığını görmek için preg_match ile çıkan bağlantıları ayrıştırmak.

Düzenli bir ifade ve bir karma kombinasyonu diyebilirim. Benim PhP berbat ama Perl bu gibi bir şey olurdu

my %Counter;
while(my currentLine = <inData>){
if($currentLine = /(www\..+\.+\/)/){
  $Counter{$1}++;
}
}

foreach $thingy (keys %Counter){
 print "There are $Counter{$thingy} links to $thingy in this document\n";
}