Как правильно парсить таблицу?



  • На сайте есть таблица с всегда разным количеством строк. Подскажите пожалуйста как можно получить текст. Примерная структура таблицы и нужная мне информация ниже

    <table class="tbl tbl-char">
      <tbody>
        <tr>
          <td>Постоянный текст 1</td>
          <td style="width:180px">всегда разный текст</td>
        </tr>
        <tr>
          <td>Постоянный текст 2</td>
          <td style="width:180px">всегда разный текст</td>
        </tr>
        <tr>
          <td>Постоянный текст 3</td>
          <td style="width:180px">НУЖНЫЙ всегда разный текст</td>
        </tr>
        <tr>
          <td>Постоянный текст 4</td>
          <td style="width:180px">всегда разный текст</td>
        </tr>
      </tbody>
    </table>
    


  • @nikitabaks наверное лучше всего через xpath будет, а что бы составить регулярку желательно видеть весь html код страницы..



  • Не знаю как бы сюда верно написать , чтобы было понятно . Скопирую исходный текст без БАСовских ньансов :

    //   html_parser_xpath_parse(VAR_SAVED_CONTENT) // парсим то что сохранили с сайта 
     // указываем имя таблицы ( в кавычках )
       VAR_XPATH_XML_LIST = html_parser_xpath_xml_list("//*[@id=\u0022proxylisttable\u0022]/tbody/tr")
       
       // для каждого елемента парсим ХМЛ цикл
       FOREACH_ARRAY_169139 = VAR_XPATH_XML_LIST
       _do(function(){
       VAR_CYCLE_INDEX = _iterator() - 1
       if(VAR_CYCLE_INDEX > FOREACH_ARRAY_169139.length - 1)_break();
       
       
       VAR_FOREACH_DATA = FOREACH_ARRAY_169139[VAR_CYCLE_INDEX]
       section_insert()
          section_start("", 414765035)!
       //  получить текст из //td[1] ( первый столбец )
       html_parser_xpath_parse(VAR_FOREACH_DATA)
          VAR_IP = html_parser_xpath_text("//td[1]")
    //  получить текст из //td[2] ( второй  ) 
     html_parser_xpath_parse(VAR_FOREACH_DATA)
          VAR_PORT = html_parser_xpath_text("//td[2]")
    
    
    

  • administrators

    @kazarang Это вы вопрос задаёте, или отвечаете на полугодовалое сообщение?



  • @fox отвечаю , для меня это было актуально . Задачу решил , поделился решением. А что не так ?


  • administrators

    @kazarang

    отвечаю , для меня это было актуально . Задачу решил , поделился решением.

    Ответ лучше было бы оставить тестовым скриптом, вышло бы нагляднее для новичков.

    А что не так ?

    Да я вроде просто спросил. Не понял вашего сообщения и решил уточнить.



  • @fox Я сам новичек ) в БАСе , спасибо @BasLike , в свое время ввел меня в imacros а теперь и сюда перетащил . И это мой первый скрипт , заработал ) Я рад , как слоняра , вот этот скрипт : 0_1539196184250_free-proxy-list2.xml он полностью открыт и добавлены комментарии



  • @kazarang у http клиента есть свой xpath и не надо будет сохранять ответ... а вообще вот упростил - 0_1539199115041_1539196179389-free-proxy-list2.xml



  • @uraabk Спасибо , вижу т.е. оперативно были созданы два списка , а потом слиты . Т.е. каждый элемент слит в переменную а потом удален из списка ( там галочка стоит )



  • @kazarang а вот быстрая версия, но крайне не понятная))) 0_1539201117763_fast-proxy-list3.xml



  • Вот это уже просто высший пилотаж ! notedat++ и никаких мышыных клацаний по менюшкам ! )) вот так уже БАС становится совсем няшным )


  • administrators

    @uraabk

    а вот быстрая версия, но крайне не понятная)))

    Использовать api BAS'a в действии "выполнить код" не всегда уместно, каждый вызов будет занимать время. Попробуйте подобный цикл сделать на 1 000 000 строк, и он будет медленным по сравнению с обычным циклом js.

    Вот скрипт на api BAS, добавляет в список (массив) 1 000 000 строк, за 14 секунд
    0_1539369409424_91f223b2-4878-4676-9e73-2cd6dd958a77-изображение.png

    [388325735] [23:43:19] Поток №1 : В списке NEW_LIST строк: 1000000
    

    А вот скрипт на js так же добавляет в список (массив) 1 000 000 строк, но за 0 секунд
    0_1539369908607_eb680a1c-f803-4efb-bf4c-fef65c370b52-изображение.png

    [388325735] [23:45:00] Поток №1 : В списке NEW_LIST строк: 1000000