X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Помогите с simple HTML DOM - парсинг таблицы (не всей).
scanread
scanread
Topic Starter сообщение 14.11.2012, 23:48; Ответить: scanread
Сообщение #1


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


В общем, кое-чего методом тыка вышло, кое-чего нет, все равно пока никак не могу вкурить неких деталей.

Есть таблица вида:

№ п/п, Картинка, Ссылка (<a href="/faq.html">Text</a>), Картинка

Т.е., 4 столбца, хотя в реальности в таблице 5 столбцов, но 5 столбец парсить не надо.

Вывести 3 столбец с нормальным видом ссылки и текстом вывожу:

if($html->innertext!='' and count($html->find('a'))){
    foreach($html->find('a[class=pi]') as $a){
        echo '<a href="http://www.site.ru/'.$a->href.'">'.$a->plaintext.'</a></br>';
                }
        }


Таблицу попробовал спарсить таким образом, и то, даже не таблицу, а необходимые столбцы и первую ячейку:

$es = $html->find('table.wb td',6);
$ee = $html->find('table.wb td',7);
$eee = $html->find('table.wb td',8);

echo $es;
echo $ee;
echo $eee;


Сколько строк в таблице я не знаю, table.wb td',6 начал с 6, поскольку есть несколько таблиц с тем же классом, и их парсить нет нужды. Начал с той, с которой надо. В итоге выходит спарсенная первая строка:

№ п/п, Картинка, Ссылка (но вида идет не как site.ru/faq.html, а как mytest/faq.html), Картинка

Как прописать правильный линк к этому парсингу в таблицу я не знаю (столбец Ссылка), только отдельно выше написал как выводил. И хотелось бы как-то упростить парсинг таблицы размером в 4(5 столбцов на странице, откуда надо парсить) столбца на N строчек.

В последующем надо будет чтобы скрипт переходил по 3 столбцу (по ссылке) и парсил некую текстовую строчку, и заносил ее в 5 столбец.

Помогите плз кто чем может каким советом дельным. Заранее благодарю.


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
elche
elche
сообщение 15.11.2012, 1:42; Ответить: elche
Сообщение #2


Участник
***

Группа: User
Сообщений: 111
Регистрация: 22.4.2010
Поблагодарили: 38 раз
Репутация:   13  


(scanread @ 14.11.2012, 23:48) *
Как прописать правильный линк

в выше примере вы же пишите: <a href="http://www.site.ru/ , т.е. указываете точно сайт-источник (ссылки похоже относительные), так и тут нужно его указывать, например так (для первого варината) $es=str_replace('href="','href="http://site.ru/',$es); выриант не шибко хорош, но на безърыбье и рак рыба (если в строке более 1 ссылки то менять будет у всех).


(scanread @ 14.11.2012, 23:48) *
как-то упростить парсинг таблицы


проблема в том, что не знаете сколько будет строк?

если да, тогда так:
$c=6;
$alltext='';
while (true)
{
$str=$html->find('table.wb td',$c);
if (!empty($str))
{
//тут кстати можно и ссылки поменять: $str=str_replace('href="','href="http://site.ru/',$str);
$alltext.= $str;}
else
{
break;
}
}
echo $alltext;

хотя я может все не так понял

Сообщение отредактировал elche - 15.11.2012, 1:43


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
scanread
scanread
Topic Starter сообщение 15.11.2012, 11:13; Ответить: scanread
Сообщение #3


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


elche, по такому запросу оно 5 минут обрабатывает и времени на выполнения не хватает.

В общем, таблица:

Прикрепленное изображение


Вот код первой строки, дальше остальные по аналогии такие же:

Прикрепленное изображение


Синим выделена строка, в которой необходимо делать замену ее, к сайту добавить окончание, чтобы можно было перейти по ней. Как Вы к примеру писали:

$str=str_replace('href="','href="http://site.ru/',$str);


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
elche
elche
сообщение 15.11.2012, 12:17; Ответить: elche
Сообщение #4


Участник
***

Группа: User
Сообщений: 111
Регистрация: 22.4.2010
Поблагодарили: 38 раз
Репутация:   13  


(scanread @ 15.11.2012, 11:13) *
5 минут обрабатывает

{
//тут кстати можно и ссылки поменять: $str=str_replace('href="','href="http://site.ru/',$str);
$alltext.= $str;
$c++;
}

да вот $c++ забыл. поставте, попробуйте


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
scanread
scanread
Topic Starter сообщение 15.11.2012, 13:55; Ответить: scanread
Сообщение #5


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


elche, спс, выводит, только
$str=str_replace('href="','href="http://site.ru/',$str);
не работает, и выводит не таблицей, а все в одну строку....


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
elche
elche
сообщение 15.11.2012, 21:39; Ответить: elche
Сообщение #6


Участник
***

Группа: User
Сообщений: 111
Регистрация: 22.4.2010
Поблагодарили: 38 раз
Репутация:   13  


(scanread @ 15.11.2012, 13:55) *
выводит не таблицей

а нужно таблицей? я просто не помню что бы уточняли на этот счет. тут нужно смотреть что получается на выходе. Да и сами запросы к документу нужно менять, слишком не правильные они
по поводу не работает $str=str_replace('href="','href="http://site.ru/',$str);, вы раскомментировали все да ? напишите кусок получившейся строки.


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
scanread
scanread
Topic Starter сообщение 15.11.2012, 23:07; Ответить: scanread
Сообщение #7


ДЕТАЛИ В ПРОФИЛЕ
******

Группа: Active User
Сообщений: 1005
Регистрация: 16.12.2009
Поблагодарили: 178 раз
Репутация:   54  


elche, отключил я все же ДОМ, пошел через выражения. Сделал так:

preg_match("#<table class=wb width='80%' cellpadding=3 align=center><tr><td class=wbwhite width=30>(.*?)</table></td></tr></table>#is", $file, $matches);
//вывод таблицы
var_dump($matches[0]);


получил всю таблицу. Итог: 5 столбцов и 101 строка. Теперь надо как-то ее чтобы было:

array(4) { [0]=> string(159) "С какой бы стороны света не шел усталый путник, каждый, оказавшись впервые в Цитадели Ордена Равновесия, невольно замирает на пороге.
Великим искусством" [1]=> string(31) "С какой бы стороны света не шел" [2]=> string(110) " усталый путник, каждый, оказавшись впервые в Цитадели Ордена Равновесия, невольно замирает на пороге.
" [3]=> string(18) "Великим искусством" }


Т.е., разбить на строки. Но надо не 5 столбцов, а 5 столбец еще выкинуть. И вот дальше ламаю голову, как через регулярку это сделать. Что не соображается пока ничего sad.gif

Сообщение отредактировал scanread - 15.11.2012, 23:18


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Помогите выбрать программу
Помогите выбрать программу
11 impak 1352 11.12.2017, 13:11
автор: Mikki
Открытая тема (нет новых ответов) Вёрстка. Per aspera ad html.
С радостью принимаю заказы по вёрстке.
3 ValeryRar 456 1.12.2017, 11:02
автор: ValeryRar
Открытая тема (нет новых ответов) Исправлю HTML ошибки на страницах Вашего сайта
10 guruapps 1207 30.11.2017, 22:59
автор: maxim1249
Открытая тема (нет новых ответов) Помогите найти плагин на WP
Отзывы с профилей соц сетей
1 SEOMR 447 30.11.2017, 7:18
автор: Nell
Открытая тема (нет новых ответов) Помогите найти проблему
Долгий ответ сервера
6 maxim1249 699 29.11.2017, 17:27
автор: genjnat


 



RSS Текстовая версия Сейчас: 17.12.2017, 2:49
Дизайн