Всем доброго времени суток. Суть вопроса в следующем.
Ко мне обратился друг, с проблемой, невозможности скопировать эту страницу в таблицу ексель
www.statarea.com/predictions
посмотрев на код, я понял что нужно спарсить данные и вывести их в html таблицу. Так как в программировании я совсем новичек, прошу сильно не пинать, но аргументиованная критика очень даже приветствуется.
Я начал с php, создал парсер, который тянул DOM, с помошью phpQuery, потом выводил в виде таблицы, все получилось, но стал боком самый главный вопрос, там возле каждого матча, есть кнопка, которая раскрывала более подробную информацию о матче. Этот контент как раз и был очень важен для моего друга, по гуглив немного я нашел статью, в которой описывался парсер через расширение для хрома, я переписал код на jQuery и он делает все то же самое что и первый, а вот как стащить динамический контент - так и не нашел. После очередного поиска по гуглу, я нашел рекомендации в двух отдельных направлениях, это node.js и nightmare.js, и второй это python и beautifulsoup. Сейчас начал изучать node.js и python. Извиняюсь за столь длинный текст, вот собственно и назрел вопрос, который я все таки решился задать, так как не нашел на него ответа.
Каким методом, возможно получить DOM, уже после клика на этот элемент? Реально ли это сделать по средствам jQuery в расширении для браузера, или все таки нужен питон или нод,джиес?
Пока ищу ответ изучаю ajax, надеясь найти там ответы)
Вот код на php
function getCurlContent ($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
function getStatareaTable ($url){
$statarea_content = file_get_contents($url); //Получаем HTML код страницы
$doc = phpQuery::newDocument($statarea_content); // Создаем обьект phpQuery
/*========================== Цикл, который парсит данные и создает таблицу ===========================*/
echo '<DIV ALIGN="center">
<TABLE BORDER="2">';
foreach($doc->find('.match') as $matches){
$matches = pq($matches);
$hostteam = '<td>'.$matches->find('.hostteam .name')->text().'</td>';
$guestteam = '<td>'.$matches->find('.guestteam .name')->text().'</td>';
$dateTime = '<td>'.$matches->find('.date')->text().'</td>';
$hostteamGoals = '<td>'.$matches->find('.hostteam .goals')->text().'</td>';
$guestteamGoals = '<td>'.$matches->find('.guestteam .goals')->text().'</td>';
$tip = '<td>'.$matches->find('.tip .value')->text().'</td>';
$likePositive = '<td>'.$matches->find('.likepositive .value')->text().'</td>';
$likeNegative = '<td>'.$matches->find('.likenegative .value')->text().'</td>';
foreach ($matches->find('.coefbox .value') as $value){
$value = pq($value);
$coefRow .= '<td>'.$value->text().'</td>';
}
echo '<tr>';
echo "$dateTime $hostteam $hostteamGoals - $guestteamGoals $guestteam $tip"
. " $likePositive $likeNegative $coefRow" ;
echo '</tr>';
unset($coefRow);
}
echo '</TABLE>
</DIV>';
}
/*============================================================================================*/
?>
Вот на jquery
(function($){
function ajaxStart(){
$('#progress').show();
}
function ajaxStop(){
$('#progress').hide();
}
function parserGo(){
ajaxStart();
var b = $.ajax('http://www.statarea.com/predictions/');
b.done(function (d) {
analysisSite(d);
ajaxStop();
});
b.fail(function (e, g, f) {
alert('Epic Fail');
ajaxStop();
})
}
function analysisSite(data){
var res = '';
$(data).find('.match').each(function(){
var hostteam = '<td>'+$(this).find('.hostteam').find('.name').text()+'</td>';
var guestteam = '<td>'+$(this).find('.guestteam').find('.name').text()+'</td>';
var dateTime = '<td>'+$(this).find('.date').text()+'</td>';
var hostteamGoals = '<td>'+$(this).find('.hostteam').find('.goals').text()+'</td>';
var guestteamGoals = '<td>'+$(this).find('.guestteam').find('.goals').text()+'</td>';
var tip = '<td>'+$(this).find('.tip').find('.value').text()+'</td>';
var likePositive = '<td>'+$(this).find('.likepositive').find('.value').text()+'</td>';
var likeNegative = '<td>'+$(this).find('.likenegative').find('.value').text()+'</td>';
var coefRow;
$(this).find('.bet').trigger('click');
$(this).find('.coefbox').each(function(){
coefRow += '<td>'+$(this).find('.value').text()+'</td>';
})
/*$(this).find('.coefbox').each(function(){
coefRow += '<td>'+$(this).find('.value').text()+'</td>';
})*/
var avrggoals = '<td>'+$(this).find('.avrggoals').text()+'</td>';
res += '<tr>'+dateTime+ hostteam +hostteamGoals+guestteamGoals+
guestteam+tip+likePositive+likeNegative+coefRow+avrggoals+'</tr>';
})
$('#resultbox').html(res);
}
$(function(){
$('#progress').hide();
$('#starter').click(parserGo);
});
})(jQuery);