Выпарсинвание данных

Сбор и анализ всего что можно собрать из сети.
Ответить
sx000
Сообщения: 12
Зарегистрирован: 08 сен 2009, 17:15

Выпарсинвание данных

Сообщение sx000 » 08 сен 2009, 17:40

Есть код

Код: Выделить всё

<font class="zag1">Продажа-покупка жилья</font>
		</td>
	</tr>

	<tr>
		<td><img src="/_img/x.gif" width="1" height="5" border="0" alt="" /></td>
	</tr>
	<tr>
		<td align=left class="ssyl">Всего объявлений: 328</td>
Цель парсинга получить значение между
Всего объявлений:N</td>
Где в нашем случае N = 328
Ловить по

Код: Выделить всё

<td align=left class="ssyl">Всего объявлений
не получиться, дело в том что такая комбинация встречается в html коде несколько раз и всегда с разными значениями вместо 328. По этом парсить надо именно этот код что дал выше.
Далее мне нужно это значение N загнать в перменную для расчетов.
За ранее спасибо за помощь.

medar2
Сообщения: 55
Зарегистрирован: 15 апр 2009, 16:48
Контактная информация:

Сообщение medar2 » 08 сен 2009, 18:07

Нужна регулярка с куском кода до нужного. Типа такого:

Код: Выделить всё

preg_match('#<font class="zag1">.*?class="ssyl">Всего объявлений: (.*?)</td>#u', $source, $match);
$n = $match(1);
Или выбирать при помощи preg_match_all все "Всего объявлений" и брать нужный по номеру, если его по номеру можно определить.

sx000
Сообщения: 12
Зарегистрирован: 08 сен 2009, 17:15

Сообщение sx000 » 08 сен 2009, 21:33

medar2 писал(а):Нужна регулярка с куском кода до нужного. Типа такого:

Код: Выделить всё

preg_match('#<font class="zag1">.*?class="ssyl">Всего объявлений: (.*?)</td>#u', $source, $match);
$n = $match(1);
Или выбирать при помощи preg_match_all все "Всего объявлений" и брать нужный по номеру, если его по номеру можно определить.
Словосочетание "Продажа-покупка жилья" должно быть обязательным. Иначе другие куски будет жрать из кода они эдентичны только вот этой надписью и мона различить
Продажа-покупка жилья

Код: Выделить всё

<font class="zag1">Продажа-покупка жилья</font>
       </td>
   </tr>

   <tr>
       <td><img src="/_img/x.gif" width="1" height="5" border="0" alt="" /></td>
   </tr>
   <tr>
       <td align=left class="ssyl">Всего объявлений: 328</td>
Надо весь кусок этот смотреть иначе нагребет другие, парметр .* нельзя использовать. Тк идентифицировать можно только именно только этим кодом.

Код: Выделить всё

preg_match('#<font class="zag1">Продажа-покупка жилья</font>
       </td>
   </tr>

   <tr>
       <td><img src="/_img/x.gif" width="1" height="5" border="0" alt="" /></td>
   </tr>
   <tr>
       <td align=left class="ssyl">Всего объявлений: (.*?)</td>#u', $source, $match);
Не знаю верно или нет. :?:


Вот вообще полный код:

Код: Выделить всё

<?php
// The following code is required to properly run Xedant.com Human Emulator
require("C:/Program Files/Xedant/Human Emulator/Templates/xedant_human_emulator.php");

//Вводим логин
$login="mail@mail.ru";
//Вводим пароль
$pass="passwordtut";

//Указываем время паузы между обновлениями: в минутах
$pausech="1";

//Расчет времени: не менять
$pausm="60000";
$resultpause=$pausech*$pausm;

//Странца ввода логина и пароля
$loginurl="http://domchel.ru/users/";

$baseurl="http://domchel.ru/users/sale.html?page=";

//Тестим новое продвинутое

for($i=1; $i<=$enterch; $i++){
$browser->navigate($loginurl);
$browser->wait_for(240,1);
$html = $webpage->get_document_body("true");

preg_match('#<font class="zag1">Продажа-покупка жилья</font>
       </td>
   </tr>

   <tr>
       <td><img src="/_img/x.gif" width="1" height="5" border="0" alt="" /></td>
   </tr>
   <tr>
       <td align=left class="ssyl">Всего объявлений: (.*?)</td>#u', $source, $match); 

$numer=$matches[1];
$enterch=round($numer);

$browser->wait_for(240,1);
$input->set_value_by_name('email',$login);
$input->set_value_by_name('password',$pass);
$button->click_by_inner_text('Войти');
$browser->wait_for(240,1);
$browser->navigate($baseurl.$i);
$browser->wait_for(240,1);
$checkbox->click_by_number(0);
$button->click_by_inner_text('Применить');
$browser->wait_for(240,1);
$app->pause($resultpause);
}

// Quit
$app->quit();
?>
Но что то не как оно не хочет если честно скрипт ошибок не выдает, на каком то этапе гаснет и все, походе не доходит даже до парсинга.

Еще хотелось бы сюда запихать хоть какой то информер на мыло, что если скрипт не отрабтывает то шлеться мыло я даже пока не могу предположить как это сделать.

LeXxiK
Сообщения: 9
Зарегистрирован: 13 апр 2009, 21:39

Сообщение LeXxiK » 09 сен 2009, 18:20

по-пацански, но работает :)

Код: Выделить всё

$page_source=$webpage->get_source();
$start=strpos($page_source,'Продажа-покупка жилья');
$start=strpos($page_source,'Всего объявлений:',$start);
$start=$start+18;
$end=strpos($page_source,'</td>', $start);
$n=substr($page_source,$start,$end-$start);
echo $n;
а скрипт, конечно, не работает, цикл for($i=1; $i<=$enterch; $i++){ есть, а переменная $enterch не задана

sx000
Сообщения: 12
Зарегистрирован: 08 сен 2009, 17:15

Сообщение sx000 » 11 сен 2009, 23:22

LeXxiK писал(а):по-пацански, но работает :)

Код: Выделить всё

$page_source=$webpage->get_source();
$start=strpos($page_source,'Продажа-покупка жилья');
$start=strpos($page_source,'Всего объявлений:',$start);
$start=$start+18;
$end=strpos($page_source,'</td>', $start);
$n=substr($page_source,$start,$end-$start);
echo $n;
а скрипт, конечно, не работает, цикл for($i=1; $i<=$enterch; $i++){ есть, а переменная $enterch не задана
Спасибо большое.

Ответить