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



 

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

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


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

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


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

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

№ п/п, Картинка, Ссылка (<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
Сообщений: 1009
Регистрация: 16.12.2009
Поблагодарили: 182 раза
Репутация:   56  


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
Сообщений: 1009
Регистрация: 16.12.2009
Поблагодарили: 182 раза
Репутация:   56  


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
Сообщений: 1009
Регистрация: 16.12.2009
Поблагодарили: 182 раза
Репутация:   56  


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

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


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


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Помогите, пожалуйста, моей дочери выжить!
благотворительный топик
30 vitvirtual 3752 19.5.2018, 8:30
автор: vitvirtual
Открытая тема (нет новых ответов) Интеграция html на Wordpress
8 mxxx 1331 16.5.2018, 18:06
автор: Chezarius
Открытая тема (нет новых ответов) Парсинг людей и сообществ ВКонтакте по любым критериям
сбор ЦА Вконтакте, парсинг людей Вконтакте
0 BukerMan 452 10.5.2018, 19:03
автор: BukerMan
Открытая тема (нет новых ответов) Перенесу вашу HTML+CSS верстку на Wordpress
0 blackhead 391 9.5.2018, 14:50
автор: blackhead
Открытая тема (нет новых ответов) Продвигаю страницу по запросу "Как сделать игру". Помогите советом, пожалуйста
Я секу в теме! Но подать статью угодным поисковикам образом не смо
22 coremission 2148 8.5.2018, 12:33
автор: coremission


 



RSS Текстовая версия Сейчас: 22.5.2018, 12:36
Дизайн