Взять данные из таблицы (<table>)

san_sanich

Client
Регистрация
15.03.2017
Сообщения
257
Благодарностей
35
Баллы
28
Есть таблица http://punktmetalloloma.ru/hanty-mansijskij-avtonomnyj-okrug-jugra/priem-metalloloma-kogalym.html (Пункты приема металла в Когалыме). Из нее мне надо брать "Название предприятия", "Адрес" и "Телефон". Возникает проблема в том, что таблица на странице не одна, взять DOM, а потом парсить от туда результат тоже не получается, поля с Названием предприятия, адресом и телефоном никак в DOMе не обозначены. То есть составить регулярные выражения, чтобы одним взять Название, вторым Адрес - нет возможности. Может у кого-то возникнут какие-либо идеи, был бы очень благодарен.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113
Я уже чувствую себя попугаем за последние дни. Зато ни разу не жалею, что изучил Xpath.
Вот путь, который находит именно таблицу с текстом внутри заголовков "Название предприятия", и ищет в ней елементы первого столбца:
Код:
//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[1]
Тоже самое, но уже элементы второго столбца:
Код:
//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[2]
Логику вы поняли. А дальше изучаете C#-Xpath подробнее и используете в браузерных или безбраузерных шаблонах:
путеводитель для новичков при использовании ZennoPoster+xpath+HtmlAgilityPack+POST\GET
 

san_sanich

Client
Регистрация
15.03.2017
Сообщения
257
Благодарностей
35
Баллы
28
Я уже чувствую себя попугаем за последние дни. Зато ни разу не жалею, что изучил Xpath.
Вот путь, который находит именно таблицу с текстом внутри заголовков "Название предприятия", и ищет в ней елементы первого столбца:
Код:
//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[1]
Тоже самое, но уже элементы второго столбца:
Код:
//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[2]
Логику вы поняли. А дальше изучаете C#-Xpath подробнее и используете в браузерных или безбраузерных шаблонах:
путеводитель для новичков при использовании ZennoPoster+xpath+HtmlAgilityPack+POST\GET
Помню Xpath когда-то использовал, когда на Java писал программу под гугловскую аддурилку (давно это было, зенки не было тогда у меня). Думаю с С# тоже не составит большого труда разобраться) Большое спасибо за подсказку!)
 

san_sanich

Client
Регистрация
15.03.2017
Сообщения
257
Благодарностей
35
Баллы
28
Я уже чувствую себя попугаем за последние дни. Зато ни разу не жалею, что изучил Xpath.
Вот путь, который находит именно таблицу с текстом внутри заголовков "Название предприятия", и ищет в ней елементы первого столбца:
Код:
//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[1]
Тоже самое, но уже элементы второго столбца:
Код:
//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[2]
Логику вы поняли. А дальше изучаете C#-Xpath подробнее и используете в браузерных или безбраузерных шаблонах:
путеводитель для новичков при использовании ZennoPoster+xpath+HtmlAgilityPack+POST\GET
И все же почему-то не получается взять данные из 1 и 2 столбца. Есть код:
Код:
<tbody>
<tr style="height: 41px;">
<th style="height: 41px; text-align: center;">Название предприятия</th>
<th style="height: 41px; text-align: center;">Адрес</th>
<th style="height: 41px; text-align: center;">Телефон</th>
<th style="height: 41px; text-align: center;">Услуги вывоза/резки</th>
<th style="height: 41px; text-align: center;">График работы</th>
</tr>
<tr style="height: 41.0938px;">
<td style="text-align: center; height: 41.0938px;"><strong>«ВТОРМЕТ КЫЗЫЛ»</strong></td>
<td style="text-align: center; height: 41.0938px;">&nbsp;ул. Заводская 30/3</td>
<td style="text-align: center; height: 41.0938px;">&nbsp;8 (923) 541-09-46</td>
<td style="text-align: center; height: 41.0938px;">&nbsp;—</td>
<td style="text-align: center; height: 41.0938px;">&nbsp;9:00 — 18:00</td>
</tr>
</tbody>
(данная таблица находится по адресу http://punktmetalloloma.ru/respublika-tyva/priem-metalloloma-v-kyzyl.html)
Пытаюсь делать как в Вашем примере (https://zennolab.com/discussion/threads/ispolzovanie-xpath-na-chistom-html.40267/#post-299467)
В строку кода C#:
Код:
var var_xpath1 = @"//*[@value]";
Подставляю свой Xpath для парсинга первого столбца таблицы:
Код:
var var_xpath1 = @"//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[1]";
Как я думал, список List1_Urls наполнится значениями из 1 столбца таблицы (в данном случае занесет в список только «ВТОРМЕТ КЫЗЫЛ»), но он остается пустым. Думаю, что, возможно, Xpath как-то по-другому нужно переписать, но как, пока не нашел...
 
Последнее редактирование:

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113
И все же почему-то не получается взять данные из 1 и 2 столбца. Есть код:
Код:
<tbody>
<tr style="height: 41px;">
<th style="height: 41px; text-align: center;">Название предприятия</th>
<th style="height: 41px; text-align: center;">Адрес</th>
<th style="height: 41px; text-align: center;">Телефон</th>
<th style="height: 41px; text-align: center;">Услуги вывоза/резки</th>
<th style="height: 41px; text-align: center;">График работы</th>
</tr>
<tr style="height: 41.0938px;">
<td style="text-align: center; height: 41.0938px;"><strong>«ВТОРМЕТ КЫЗЫЛ»</strong></td>
<td style="text-align: center; height: 41.0938px;">&nbsp;ул. Заводская 30/3</td>
<td style="text-align: center; height: 41.0938px;">&nbsp;8 (923) 541-09-46</td>
<td style="text-align: center; height: 41.0938px;">&nbsp;—</td>
<td style="text-align: center; height: 41.0938px;">&nbsp;9:00 — 18:00</td>
</tr>
</tbody>
(данная таблица находится по адресу http://punktmetalloloma.ru/respublika-tyva/priem-metalloloma-v-kyzyl.html)
Пытаюсь делать как в Вашем примере (https://zennolab.com/discussion/threads/ispolzovanie-xpath-na-chistom-html.40267/#post-299467)
В строку кода C#:
Код:
var var_xpath1 = @"//*[@value]";
Подставляю свой Xpath для парсинга первого столбца таблицы:
Код:
var var_xpath1 = @"//tbody[.//th[contains(text(), 'Название предприятия')]]/tr/td[1]";
Как я думал, список List1_Urls наполнится значениями из 1 столбца таблицы, но он остается пустым. Думаю, что, возможно, Xpath как-то по-другому нужно переписать, но как, пока не нашел...
Ну если вы слепо скопировали код с примера, то там разве что пустые строки добавит, ибо в вашем случае надо не "value" найденных по Xpath элементов добавлять в список а Innertext:
Код:
temp = res.InnerText;
после чего еще наверное HtmlDecode надо делать и Trim, гуглите по форуму.
 
  • Спасибо
Реакции: san_sanich

san_sanich

Client
Регистрация
15.03.2017
Сообщения
257
Благодарностей
35
Баллы
28

san_sanich

Client
Регистрация
15.03.2017
Сообщения
257
Благодарностей
35
Баллы
28
Снова не получается по Xpath:( Теперь таблица выглядит таким образом:
Код:
<tbody>
<tr>
<td style="text-align: center;">&nbsp;<strong>Название службы</strong></td>
<td style="text-align: center;"><strong>&nbsp;Номера телефонов</strong></td>
<td style="text-align: center;"><strong>&nbsp;Тариф&nbsp;</strong></td>
</tr>
<tr>
<td style="text-align: center;">Максим</td>
<td style="text-align: center;">+7 (3812) 66-11-11<p></p>
<p>+7 (3812) 22-20-00</p>
<p>+7 (3812) 40-70-24</p></td>
<td style="text-align: center;">&nbsp;-—</td>
</tr>
<tr>
<td style="text-align: center;">&nbsp;Лидер</td>
<td style="text-align: center;">+7 (3812) 33-22-22<p></p>
<p>+7 (3812) 36-00-00</p></td>
<td style="text-align: center;">от 85 руб.</td>
</tr>
<tr>
<td style="text-align: center;">&nbsp;Юнис Лада</td>
<td style="text-align: center;">+7 (3812) 60-60-60<p></p>
<p>+7 (3812) 53-03-03</p>
<p>Бесплатный номер 055</p></td>
<td style="text-align: center;">&nbsp;-—</td>
</tr>
<tr>
( http://taksiphone.ru/sluzhby-taksi-omsk.html )

Нужно брать 1 и 2 столбец из таблицы. Пробовал такой вариант для поиска первого столбца
Код:
@"//tbody[.//td[contains(text(), 'Название службы')]]/tr/td[1]"
Не работает. Пробовал еще с добавлением атрибута style - тоже не ищет (может не так как надо записал в xpath). Был бы очень благодарен за помощь
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113
Снова не получается по Xpath:( Теперь таблица выглядит таким образом:
Код:
<tbody>
<tr>
<td style="text-align: center;">&nbsp;<strong>Название службы</strong></td>
<td style="text-align: center;"><strong>&nbsp;Номера телефонов</strong></td>
<td style="text-align: center;"><strong>&nbsp;Тариф&nbsp;</strong></td>
</tr>
<tr>
<td style="text-align: center;">Максим</td>
<td style="text-align: center;">+7 (3812) 66-11-11<p></p>
<p>+7 (3812) 22-20-00</p>
<p>+7 (3812) 40-70-24</p></td>
<td style="text-align: center;">&nbsp;-—</td>
</tr>
<tr>
<td style="text-align: center;">&nbsp;Лидер</td>
<td style="text-align: center;">+7 (3812) 33-22-22<p></p>
<p>+7 (3812) 36-00-00</p></td>
<td style="text-align: center;">от 85 руб.</td>
</tr>
<tr>
<td style="text-align: center;">&nbsp;Юнис Лада</td>
<td style="text-align: center;">+7 (3812) 60-60-60<p></p>
<p>+7 (3812) 53-03-03</p>
<p>Бесплатный номер 055</p></td>
<td style="text-align: center;">&nbsp;-—</td>
</tr>
<tr>
( http://taksiphone.ru/sluzhby-taksi-omsk.html )

Нужно брать 1 и 2 столбец из таблицы. Пробовал такой вариант для поиска первого столбца
Код:
@"//tbody[.//td[contains(text(), 'Название службы')]]/tr/td[1]"
Не работает. Пробовал еще с добавлением атрибута style - тоже не ищет (может не так как надо записал в xpath). Был бы очень благодарен за помощь
хз, долбанный strong помешал:
Код:
//tbody[.//td/strong[contains(text(), 'Название службы')]]/tr/td[1]
 
  • Спасибо
Реакции: san_sanich

z@jivalo

Client
Регистрация
27.12.2016
Сообщения
798
Благодарностей
178
Баллы
43

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)