Спарсить таблицу с phpQuery

587
23 апреля 2017, 01:44

На сайте есть таблицы (их кол-во может менятся),внутри таблиц есть thead ( в нем только один tr>th) и tbody (в нем может быть сколько угодно tr и в каждой строке по 7 td). На картинке в tbody 2 tr:

Задача: необходимо парсить все данные из ячеек в удобной форме и записать в БД. Как я это делал:

$doc = phpQuery::newDocument($file);
foreach ($doc->find('.calendar-table') as $leagueTable) {
    $leagueTable = pq($leagueTable);
    $leagueName = $leagueTable->find('thead tr th')->text();
    ...
}

Далее необходимо зайти в tbody и пройти по всем tr и достать все ячейки. Я пробывал, но не совсем получается:

foreach ($leagueTable->find('tbody') as $tr) {
    $tr = pq($tr);
    $matchDate = $tr->find('tr td.date')->html();
    //и так далее все ячейки
}
$data[] = array('matchDate' => $matchDate,'awayTeam' => $awayTeam);

При var_dump получаю такой массив:

То есть там где были две строки в tbody они "склеились" в одну. Хотелось бы получить массив awayTeam с ключами 0,1 где к примеру две команды(т.е было две строки).

Answer 1

Вот так получилось. Проблемы были с объвлением массивов, и немного в цикле для phpQuery.

$doc = phpQuery::newDocument($file); 
foreach ($doc->find('.calendar-table') as $leagueTable) { 
	$leagueTable = pq($leagueTable); 
	$leagueTable->find('.tv-channel, .bet-td')->remove(); 
	$leagueTable->html(); 
	$leagueName = $leagueTable->find('thead tr th')->html(); 
	$leagueName = trim($leagueName); 
	$awayTeam = array(); 
	$matchDate = array(); 
	$homeTeam = array(); 
	$homeTeamLogo = array(); 
	$awayTeamLogo = array(); 
	foreach ($leagueTable->find('tbody tr') as $tr) { 
		$tr = pq($tr); 
		$matchDate[] = $tr->find('td.date')->text(); 
		$homeTeam[] = $tr->find('td:nth-child(2) a')->text(); 
		$homeTeamLogo[] = $tr->find('td:nth-child(3) a img')->attr('src'); 
		$awayTeamLogo[] = $tr->find('td:nth-child(5) a img')->attr('src'); 
		$awayTeam[] = $tr->find('td:nth-child(6) a')->text(); 
	} 
 
 
	$data[] = array( 
	'leagueName' => $leagueName, 
	'homeTeam' => $homeTeam, 
	'homeTeamLogo' => $homeTeamLogo, 
	'awayTeamLogo' => $awayTeamLogo, 
	'awayTeam' => $awayTeam, 
	); 
}

READ ALSO
Как сделать файловый менеджер Laravel?

Как сделать файловый менеджер Laravel?

Я хочу чтоб при нажатии кнопки для загрузки картинки или другого файла открывался файловый менеджер как допустим на WordPressКак это сделать?...

488
Как правильно установить CI3 Fire starter

Как правильно установить CI3 Fire starter

Всем привет! Пытаюсь установить https://githubcom/JasonBaier/ci3-fire-starter#installation

293
Ajax отправка атрибутов

Ajax отправка атрибутов

Собираю атрибуты с элемента:

281