@Select1d
Прогнозист

Парсинг с Simple Html Dom, Как правильно?

Доброго времени суток. Пытаюсь запарсить архив тиражей с помощью библиотеки Simple Html Dom Parser.
Есть код сайта:
<tr class="S2H"><td colspan="4" class="S2L">Футбол. До 17 лет. Чемпионат Европы. Элитный раунд</td><td class="bl">1</td><td>X</td><td class="br">2
</td></tr>
<tr><td>1</td><td>21.03 17:30</td><td class="S1L">Уэльс U17 - Швеция U17</td><td>0:1</td><td class="bl">32.00 / 30.81</td><td>28.00 / 26.00</td><td class="br">40.00 / 43.19
</td></tr>

И так в итоге по 15 матчам в тираже.

Мне требуется каждый отдельный атрибут добавить в бд, в одну запись. Есть структура бд следующего вида:
  • id - ид матча (от 1 до 15)
  • date (дата)
  • tourney (название лиги)
  • match (название команд)
  • score (счёт)
  • kef (распределение шансов, коэффициенты).

И так отправить 15 записей с одного тиража в БД.

Я пытаюсь вытащить по одной записи вот таким образом:
<?
include 'simple_html_dom.php';

$html = file_get_html('http://sportsbet.com/list/ru/322/');
$res = $html->find('tr', 5);
echo $res;

?>

Результат такой:
121.03 17:30Уэльс U17 - Швеция U170:132.00 / 30.8128.00 / 26.0040.00 / 43.19

Как мне эти данные правильно разделить ? или как перебирать после S2H каждый ?
И еще вопрос, если искать класс S2H, то нету данных о лиге (класс S2L).

Я новичок в этом деле, помогите пожалуйста организовать грамотный парсинг, чтобы вытаскивать полностью целую запись и потом её разбивать, либо работать с каждым элементом, читаю литературу, но не пойму как это всё реализовать.

Заранее огромное спасибо!
  • Вопрос задан
  • 705 просмотров
Решения вопроса 1
@OVK2015
<?php	
	function getRemoteData($url, $argsArray, $ifPostRequest)
	{		
		$userAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2414.0 Safari/537.36";
		$cURLsession = curl_init();
	
		curl_setopt($cURLsession, CURLOPT_URL, $url);		
		curl_setopt($cURLsession, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($cURLsession, CURLOPT_RETURNTRANSFER, true);			
		curl_setopt($cURLsession, CURLOPT_USERAGENT, $userAgent);							
		curl_setopt($cURLsession, CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($cURLsession, CURLOPT_CONNECTTIMEOUT, 30);
		// curl_setopt($cURLsession, CURLOPT_REFERER, $url);
		if($ifPostRequest)
		{
			curl_setopt($cURLsession, CURLOPT_POST, true);		
			curl_setopt($cURLsession, CURLOPT_POSTFIELDS, $argsArray);
			curl_setopt($cURLsession, CURLOPT_HTTPHEADER, 
			array
			(			
				"X-Requested-With: XMLHttpRequest"		   
			));			
		}
		if(($curlResult = curl_exec($cURLsession)) === false)		
		{		
			die("Error fetchind data: ".curl_error($cURLsession)." from ".$this->url);								
		}
		
		curl_close($cURLsession);
	
		return $curlResult;
	}		
	
	$url = "http://toto.fonsportsbet.com/list/ru/322/";
	$content = getRemoteData($url, "", false);

	// file_put_contents(__DIR__."\\footbal.html", $content);
	// echo "Saved\n";
 
	// $content = file_get_contents(__DIR__."\\footbal.html");

	$regExpLigaWrapper = 
		"#(?<=<td colspan=4 class=S2L>)(.*?)(<td class=bl>)".
		"(.*?)((?:<td colspan=4 class=S2L>)|(?:</table>))#si";
	$regExpPlayWrapper = 
		"#<td>(\d{1,})<td>(.*?)<td class=S1L>(.*?)<td>".
		"(.*?)<td(?:.*?)bl>(.*?)<td>(.*?)<(?:.*?)>(.*?)(?:<|$)#si";
	preg_match_all($regExpLigaWrapper, $content, $ligaMatches, PREG_SET_ORDER);	
	
	foreach($ligaMatches as $ligaMatch) 
	{
		echo "Liga: ".$ligaMatch[1]."\n****************************\n";
		preg_match_all($regExpPlayWrapper, $ligaMatch[3], $playMatches, PREG_SET_ORDER);		
		foreach($playMatches as $playMatch) 
		{
			echo 
			"id: ".$playMatch[1]."\n".
			"Time: ".$playMatch[2]."\n".
			"Name: ".$ligaMatch[1]."\t".$playMatch[3]."\n".
			"Count: ".$playMatch[4]."\n".
			"Class1: ".$playMatch[5]."\n".
			"Class2: ".$playMatch[6]."\n".
			"Class3: ".$playMatch[7]."\n".
			"\n";			
		}
	}
?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Select1d Автор вопроса
Прогнозист
Я добился того, что массив содержит следующие данные:
Футбол. До 17 лет. Чемпионат Европы. Элитный раунд1X2
121.03 17:30Уэльс U17 - Швеция U170:132.00 / 30.8128.00 / 26.0040.00 / 43.19

Исходный код выглядит следующим образом:
<tr class=S2H><td colspan=4 class=S2L>Футбол. До 17 лет. Чемпионат Европы. Элитный раунд<td class=bl>1<td>X<td class=br>2 <br><tr><td>1<td>21.03 17:30<td class=S1L>Уэльс U17 - Швеция U17<td>0:1<td class=bl>32.00 / 30.81<td>28.00 / 26.00<td class=br>40.00 / 43.19 <br>

Слитно всё получается, я так понял, из-за того, что у меня нет css стиля. Но задача не в этом.
Теперь мне осталось из этого:
121.03 17:30Уэльс U17 - Швеция U170:132.00 / 30.8128.00 / 26.0040.00 / 43.19

Превратить вот в такой вид:
1 21.03 17:30 Уэльс U17 - Швеция U17 0:1 32.00 / 30.81 28.00 / 26.00 40.00 / 43.19

То есть расставить пробелы и положить каждый атрибут в отдельные переменные. (id, date, match, score, koeficienti). Подскажите пожалуйста рег. выражение, чтобы мне вместо тегов подставить пробелы и разложить это всё по переменным.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы