Не могу спарсить IP. Нет, не только IP.



  • Есть сайт. Попробовал спарсить все IP. Пишу xPath. Не получается. Ладно. Попробовал спарсить хотя бы один IP. Тоже не получается. Вообще, ничего. Ну, хотя бы //table дал результат какой-нибудь. Нет.
    Я не знаю, почему так. Прошу помощи.
    xPath не предоставляю, т.к. не вижу смысла. У меня (по крайней мере) даже элементарный div (не глубоко вложенный) не парсится.

    В инспекторе (Firefox) тэг tbody видно. А в исходном файле этой же страницы его нет вообще. Почему так?



  • @hubble
    потому-что тег tbody обычно не пишут, а при построении DOM он добаляется/исправляется, так как является обязательным





  • Спасибо.
    Ясно. Ознакомлюсь.
    Но вопрос все равно открыт.



  • @my3uka У меня есть мануал. Много мануалов. Но все равно не получается составить xpath.
    Может вы думаете, что мне лень и я хочу, чтобы кто-то за меня составил. Нет. Я их всегда составлял сам (иногда с помощью). Но здесь я не знаю, как его составить.
    У меня так получилось:
    //table[@id="tblproxy"]/tbody/tr[@class="loading-row"]/following-sibling::*/td[1]
    Это не работает



  • @hubble А как на счёт сохранения кода всей страницы и парсинга через регулярку в "регулярные выражения" -> "извлечь все данные"? Я даже регулярку тебе подобрал для такой схемы: PROXY_IP":"([\s\S]+?)","



  • @Pragmatik Спасибо.
    Я уже тоже об этом думал. Но как-то считал, что применять регулярное выражение для xml-файла немного не комильфо. Но, видимо, так и придется сделать. Если, конечно, точно не получится через xpath. Да и в БАСе удобнее было бы использовать Xpath получить каждый текст. Текст там не на одной странице.



  • @hubble Вам же выше @ruzne все объяснил. В коде страницы tbody может и не быть. То, что он есть в браузере еще не означает,что он есть в коде т.к. браузер его может дописать сам. А вы запросом получаете код страницы в котором его нет, поэтому ваш xpath будет не верным. Уберите тег tbody и скорей всего у вас все будет работать.



  • Ай-яй-яй. А я-то этого и не заметил :)
    Я же в своем первом посте написал, что у меня не получается применить не только этот xpath (он указывался как один из примеров). С чего вы вдруг решили, что я после того, что то, что объяснил мне выше @ruzne, не принял во внимание. Глупости.
    Попробуйте вы написать. Учтите, конечно, tbody . Получится, опубликуйте. Буду Вам признателен.



  • Если применить //table[@id="tblproxy"], то там не xml-текст. Ну а потом регулярка. Как-то так. Одним xpath`ом - ну никак у меня.



  • https://ibb.co/df5fEx
    все гуд. А тот мануал всетаке лутчше прочесть.



  • @my3uka Спасибо. Мануал, действительно хороший.
    Так какой xpath. //script ?



  • @hubble //*[contains(@class, 'proxy ')]/td[2] тест



  • @seedgg //*[contains(@class, 'proxy ')]/td[3] для порта. Все парсиш в списки. Потом объединяешь через двоеточие



  • @seedgg Он страницу получает get-запросом. В ней не сработает этот xpath.



  • @hubble Там данные в json виде, проще доставать их через json.parse.
    Вот тестовый скрипт. Осталось привести порт прокси в нормальный вид.



  • Всем большое спасибо!
    Буду разбираться.

    P.S.
    А почему не получалось применить xpath?
    Я имею в виду, что найденный путь в инспекторе не отрабатывал в программе?



  • @hubble said in Не могу спарсить IP. Нет, не только IP.:

    Если применить //table[@id="tblproxy"], то там не xml-текст. Ну а потом регулярка. Как-то так. Одним xpath`ом - ну никак у меня.

    почему там должен оказаться xml-ТЕКСТ(sic!), Вам же обрабатываете html.
    я так считаю, не разбираете xpath и нафиг он не нужен,

    /([\d]{1-3}\.[\d]{1-3}\.[\d]{1-3}\.[\d]{1-3})/
    

    чтобы извлеч ip, обычно хватает

    и если xpath не работает значит xpath селектор неверны

    или работайте с браузером и DOМ, там и tbody будет и есть css селекторы которые вероятно проще

    document.querySelector('css')
    

    а для работы с таблицами есть специальные методы



  • @hubble А вы код смотрели? В исходном коде таблицой и не пахнет.

    <script type="text/javascript">
                        gp.insertPrx({"PROXY_CITY":"","PROXY_COUNTRY":"Colombia","PROXY_IP":"190.248.158.194","PROXY_LAST_UPDATE":"8 15","PROXY_PORT":"1F90","PROXY_REFS":null,"PROXY_STATE":"","PROXY_STATUS":"OK","PROXY_TIME":"288","PROXY_TYPE":"Transparent","PROXY_UID":null,"PROXY_UPTIMELD":"33/24"});
    </script>
    <script type="text/javascript">
                        gp.insertPrx({"PROXY_CITY":"","PROXY_COUNTRY":"Thailand","PROXY_IP":"118.175.13.178","PROXY_LAST_UPDATE":"8 0","PROXY_PORT":"1F90","PROXY_REFS":null,"PROXY_STATE":"","PROXY_STATUS":"OK","PROXY_TIME":"780","PROXY_TYPE":"Transparent","PROXY_UID":null,"PROXY_UPTIMELD":"4/2"});
     </script> 
    ................................
    

    Максиму тут можно спарсить все данные //script[contains(text(),'PROXY_IP')] , а потом уже регулярным выражением выдергивать данные. Либо можно JSON.parse(), как выше предложил @Fox



  • Благодарю ВСЕХ!!!
    Информации более, чем достаточно.


Log in to reply