все ссылки на странице, и сколько из них снова ссылаются на одну и ту же страницу (как мы можем сделать это в php)? - PullRequest
1 голос
/ 26 января 2010

Я пытаюсь написать небольшую функцию PHP, которая будет проходить по странице (при условии URL) и будет возвращать количество ссылок и количество ссылок, которые ссылаются на одну и ту же страницу. Например, если я предоставлю google.com в качестве URL-адреса, он должен вернуть количество ссылок на google.com и количество ссылок на google.com (включая, конечно, www.google.com, google.com, google. com / # и т. д.)

Это легко сделать, и как бы я это сделал?

(это НЕ домашний вопрос, поэтому, пожалуйста, предоставьте как можно больше помощи

Если вам нужна дополнительная информация о том, что я имею в виду под вопросом, просто попросите меня предоставить дополнительную информацию

Ответы [ 4 ]

3 голосов
/ 26 января 2010

Я бы предложил SimpleXml или DOM для этой задачи, но они будут задыхаться от недопустимой разметки, и, к сожалению, большинство в Интернете все еще использует недопустимую разметку, включая Google , который вы упомянули в своем вопросе. Вы можете извлечь HTML из этих URL и аккуратные их, но вы также можете использовать 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);

Обратите внимание, что у меня нет установленного банкомата SimpleHTML, поэтому вышеописанное может не работать из коробки. Это должно направить вас в правильном направлении.


РЕДАКТИРОВАТЬ

О, мальчик, я правда это написал? Я был пьян или что-то? И почему никто не жаловался на это? Чтобы исправить себя:

DOM отлично справляется с битым HTML, если вы используете метод loadHTML(). SimpleXml нет. Предлагаемое решение с SimpleHtmlDom, вероятно, будет работать, но IMO SimpleHTMLDom - отстой. Лучшие сторонние библиотеки можно найти в Лучшие методы для анализа HTML .

1 голос
/ 26 января 2010

Загрузить содержимое страницы в переменную:

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

и выполните preg_match () для $ html

проверьте руководство php для этого.

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

0 голосов
/ 26 января 2010

Сочетание регулярного выражения и хеша, я бы сказал. Мой PhP отстой, но это будет что-то вроде этого в Perl

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";
}
0 голосов
/ 26 января 2010

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

Вы можете использовать simpleXML, чтобы найти все ссылки на странице, а затем проанализировать полученные ссылки с помощью preg_match, чтобы определить, соответствуют ли они тому, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...