2016-08-11 6 views
2

Я не эксперт на языках или не знаю об этом. Я извлекаю данные с веб-сайта, который является наполовину динамичным.Должен ли я использовать Xpath или regexp для этого?

Например, мне нужно иметь 2 столбца для «Консультирование по плану покупки жилья - Тип клиента» и «Консультирование по плану покупки жилья - Тип инвестиций», в котором будут перечислены типы клиентов и инвестиции (может быть несколько), они могут войти в одну ячейку, но имеют какой-то разделитель, такой как «;».

Вот что появляется таблица, как

How the table appears

Вот что появится такой код:

Консультирование по плану покупки жилья

   <div id="a2Nb000000035ohEAA" class="collapse DisciplineDetails PassportDetails PermDesc"> 
        <h3 class="PermissionsListHeader">Advising on a home purchase plan</h3> 
        <br> 
        <br> 
       </div> 

       <ul class="PermissionConditionsList"> 
        <li class="PermissionsConditionsItem"> 
        Customer Type 

        <ul class="PermCondsLimitationsList"> 
         <li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:0:j_id533:0:j_id535:0:j_id538"></span></li> 

         <li class="PermCondsLimitationsItem Popover">Customer</li> 
        </ul> 
        </li> 
       </ul> 

       <ul class="PermissionConditionsList"> 
        <li class="PermissionsConditionsItem"> 
        Investment Type 

        <ul class="PermCondsLimitationsList"> 
         <li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:1:j_id533:0:j_id535:0:j_id538"></span></li> 

         <li class="PermCondsLimitationsItem Popover">Home purchase plans</li> 
        </ul> 
        </li> 
       </ul> 
       </div> 
+0

P.S. im используя Import.io для этой экстракции. – Tomas

+0

, прежде чем приступать к использованию RegExp, пожалуйста, поздоровайтесь с [tony the pony] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) ... используйте xpath или просто [querySelector] (https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector) и [querySelectorAll] (https: //developer.mozilla. org/en-US/docs/Web/API/Document/querySelectorAll) –

+0

Благодарим вас за помощь Jaromanda X, есть ли вероятность, что вы могли бы закодировать такой xpath для этой задачи? Я задираю, чтобы найти какую-то простую информацию об этом, так как это слишком сложно для меня .. – Tomas

ответ

2

Это XPath работает, если нет других списков, которые имеют эти классы, но не должны принимать во внимание.

//ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)] 

Испытано here

Чтобы просто получить заглавия:

//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/text()[normalize-space(.)] 

Комбинированный:

//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/(text()|ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)] 

Но, чтобы получить как в определенном формате, XSLT, вероятно, будет более полезно.

+0

Привет, Лука, большое вам спасибо за вашу помощь! Вы первый человек, который действительно дал мне что-то похожее на то, что им после! Я готов заплатить вам за еду или кофе, если вы поможете мне правильно построить этот xpath. В основном это веб-страница при извлечении. Перейдите к разрешениям, и это те таблицы, в которых мне нужны xpaths для извлечения 3 групп информации из каждого , Тип клиента, тип инвестиций и ограничения. Мне нужно, чтобы оно соответствовало названию таблицы, а затем извлекало эти 3 группы информации из каждого. Это что-то, что вы могли бы сделать? – Tomas

+0

В целом, люди на этом сайте награждаются очками репутации, полученными от авансов/утверждений и т. Д. Кофе и питание не были (пока?) Реализованы в stackexchange. И я уже не раз заметил, что это не служба кодирования. И у меня нет никакого интереса к тому, чтобы заниматься тем, что «вам не нужно котировать» сервис с именем Import.io. Я советую вам взглянуть на xml и поэкспериментировать с XPATH. Например, через этот сайт я связался в своем ответе. Этот опыт обучения стоит того времени. – LukStorms

+0

Я просто предложил в качестве вежливости .. не нужно это принимать. Я понимаю, что этот сайт больше связан с техническими вопросами, а не с запросами, но поскольку у меня нет никаких знаний в этой области, я не знаю, куда начать. Я надеюсь, что найду кого-нибудь, кто откажется от 5 минут своего времени, чтобы написать код и спасти мне бесконечные часы исследований, склонившихся над новой областью, в которой они полностью зеленые. – Tomas

0

Если у вас есть хром, вы можете просмотреть xpath элемента, щелкнув правой кнопкой мыши по нужной области и перейдя в -> Осмотреть. Будет выделена соответствующая часть исходного кода. Оттуда вы можете получить xpath, щелкнув правой кнопкой мыши код выделения и перейдя в Copy -> Copy XPath.

+0

. Спасибо, он хорошо работает со статическими сайтами, но один из них работает наполовину динамически, что означает, что xpaths использует деления беспорядочно, когда есть изменения, и заканчивается тем, что вытаскивает неправильную информацию. – Tomas

+0

А, ок. Да, тогда вы зависите от идентификаторов классов. Я не очень хорошо знаком с import.io. Я очищаю и очищаю данные для своей работы, я использовал Jsoup и пакет HTMLAgility. Я мог бы помочь вам с этими синтаксисами. – wizardzz

Смежные вопросы