На сайте голландских новостей есть: nu.nl Мне очень интересно получить первый заголовок url, который находится над ней:
<h3 class="hdtitle"> <a style="" onclick="NU.AT.internalLink(this, event);" xtclib="position1_article_1" href="/buitenland/2880252/griekse-hotels-ontruimd-bosbranden.html"> Griekse hotels ontruimd om bosbranden <img src="/images/i18n/nl/slideshow/bt_fotograaf.png" class="vidlinkicon" alt=""> </a> </h3>
Итак, мой вопрос: как получить этот URL? Могу ли я сделать это с помощью JQuery? Я бы подумал не потому, что это не на моем сервере. Может, мне придется использовать PHP? С чего начать?
Поскольку http://www.nu.nl не является вашим сайтом, вы можете сделать кросс-домен GET
с использованием PHP
прокси-метода, иначе вы получите такую ошибку:
XMLHttpRequest не может загрузить http://www.nu.nl/ . Происхождение http://yourdomain.com не разрешено Access-Control-Allow-Origin.
Прежде всего используйте этот файл на своем сервере со стороны PHP :
proxy.php (Обновлено)
<?php if(isset($_GET['site'])){ $f = fopen($_GET['site'], 'r'); $html = ''; while (!feof($f)) { $html .= fread($f, 24000); } fclose($f); echo $html; } ?>
Теперь, на стороне javascript, используя jQuery, вы можете сделать следующее:
(Просто, чтобы знать, что я использую prop();
потому что я использую версию jQuery 1.7.2 . Поэтому, если вы используете версию до 1.6.x , попробуйте attr();
вместо этого)
$(function(){ var site = 'http://www.nu.nl'; $.get('proxy.php', { site:site }, function(data){ var href = $(data).find('.hdtitle').first().children(':first-child').prop('href'); var url = href.split('/'); href = href.replace(url[2], 'nu.nl'); // Put the 'href' inside your div as a link $('#myDiv').html('<a href="' + href + '" target="_blank">' + href + '</a>'); }, 'html'); });
Как вы можете видеть, запрос находится в вашем домене, но это своего рода сложная вещь, поэтому вы снова не получите ошибку Access-Control-Allow-Origin
!
Если вы хотите получить все заголовки href
как вы писали в комментариях, вы можете сделать следующее:
Просто измените код jQuery вот так …
$(function(){ var site = 'http://www.nu.nl'; $.get('proxy.php', { site:site }, function(data){ // get all html headlines headlines = $(data).find('.hdtitle'); // get 'href' attribute of each headline and put it inside div headlines.map(function(elem, index){ href = $(this).children(':first-child').prop('href'); url = href.split('/'); href = href.replace(url[2], 'nu.nl'); $('#myDiv').append('<a href="' + href + '" target="_blank">' + href + '</a><br/>'); }); }, 'html'); });
и использовать обновленный файл proxy.php
(для обоих случаев – 1 или все заголовки).
Надеюсь это поможет 🙂
Вы можете использовать библиотеку simplehtmldom, чтобы получить эту ссылку
Что-то вроде того
$html = file_get_html('website_link'); echo $html->getElementById("hdtitle")->childNodes(1)->getAttribute('href');
подробнее здесь
Я бы предложил RSS, но, к сожалению, заголовок, который вы ищете, похоже, не появляется.
<? $f = fopen('http://www.nu.nl', 'r'); $html = ''; while(strpos($html, 'position1_article_1') === FALSE) $html .= fread($f, 24000); fclose($f); $pos = strpos($html, 'position1_article_1'); $urlleft = substr($html, $pos + 27); $url = substr($urlleft, 0, strpos($urlleft, '"')); echo 'http://www.nu.nl' . $url; ?>
Выходы: http://www.nu.nl/buitenland/2880252/griekse-hotels-ontruimd-bosbranden.html
Используйте cURL для извлечения страницы. Затем используйте следующую функцию для анализа строки, которую вы предоставили;
preg_match("/<a.*?href\=\"(.*?)\".*?>/is",$text,$matches);
URL-адрес результата будет в массиве $ matches.
Если вы хотите настроить бот jQuery для очистки страницы через браузер (расширения Google Chrome допускают эту функцию):
// print out the found anchor link's href attribute console.log($('.hdtitle').find('a').attr('href'));
Если вы хотите использовать PHP, вам нужно очистить страницу для этой ссылки href
. Для этого используйте библиотеки, такие как SimpleTest
. Лучший способ периодически очищать – это связать ваш PHP-скрипт с cronjob
.
SimpleTest : http://www.lastcraft.com/browser_documentation.php
cronjob : http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/
Удачи!