Не могу спарсить IP. Нет, не только IP.
-
Есть сайт. Попробовал спарсить все IP. Пишу xPath. Не получается. Ладно. Попробовал спарсить хотя бы один IP. Тоже не получается. Вообще, ничего. Ну, хотя бы //table дал результат какой-нибудь. Нет.
Я не знаю, почему так. Прошу помощи.
xPath не предоставляю, т.к. не вижу смысла. У меня (по крайней мере) даже элементарный div (не глубоко вложенный) не парсится.В инспекторе (Firefox) тэг tbody видно. А в исходном файле этой же страницы его нет вообще. Почему так?
-
@hubble
потому-что тег tbody обычно не пишут, а при построении DOM он добаляется/исправляется, так как является обязательным
-
@hubble
https://docs.google.com/document/d/1PdfKMDfoqFIlF4tN1jKrOf1iZ1rqESy2xVMIj3uuV3g/pub - мануал по XPATH.
-
Спасибо.
Ясно. Ознакомлюсь.
Но вопрос все равно открыт.
-
@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 ?
-
-
@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
-
Благодарю ВСЕХ!!!
Информации более, чем достаточно.