Страница 1 из 1
Выпарсинвание данных
Добавлено: 08 сен 2009, 17:40
sx000
Есть код
Код: Выделить всё
<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 загнать в перменную для расчетов.
За ранее спасибо за помощь.
Добавлено: 08 сен 2009, 18:07
medar2
Нужна регулярка с куском кода до нужного. Типа такого:
Код: Выделить всё
preg_match('#<font class="zag1">.*?class="ssyl">Всего объявлений: (.*?)</td>#u', $source, $match);
$n = $match(1);
Или выбирать при помощи preg_match_all все "Всего объявлений" и брать нужный по номеру, если его по номеру можно определить.
Добавлено: 08 сен 2009, 21:33
sx000
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();
?>
Но что то не как оно не хочет если честно скрипт ошибок не выдает, на каком то этапе гаснет и все, походе не доходит даже до парсинга.
Еще хотелось бы сюда запихать хоть какой то информер на мыло, что если скрипт не отрабтывает то шлеться мыло я даже пока не могу предположить как это сделать.
Добавлено: 09 сен 2009, 18:20
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 не задана
Добавлено: 11 сен 2009, 23:22
sx000
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 не задана
Спасибо большое.