Очень странная запись чисел
Приветствую многоуважаемый All ! Тут мне уже не раз помогали, хочу попросить помощи ещё раз.
Проблема такая. Ковыряя один из скриптов, наткнулся на очень странную запись чисел например строка: +((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])) Означает число 43. По крайней мере в браузере это так, можете проверить в консоли. Путём экспериментов понял, что числа формируются из групп в круглых скобках как десятичные. Левая группа старший разряд и т.д. Сами числа находятся как число квадратных скобок [] перед которыми стоят восклицательные знаки. Однако я не уверен, что всё знаю об этом способе. Вполне мог и пропустить какие-то особенности. Если кто в курсе, подскажите, где можно узнать об этом подробнее. Мне нужно уметь парсить на питоне подобные записи. Как возникла задача. Мне в скрипте (python) нужно получать список бесплатных прокси-серверов. Причем их нужно МНОГО. Поэтому сервисы с API не годятся, там слишком мал суточный бесплатный лимит. Из платных сервисов с защитой от автоматического сканирования, мне больше всех понравился hideme. Но там применяют проверку на "человечность" веб-агента, где используется как раз такая форма записи чисел. Если кому любопытно, вот скрипт на питоне, получающий защитную страничку: Код:
import requests P.S. Предложения типа заплатить денюшку отвергаются. Не потому что жаба душит, а потому что скрипт делается для бесплатного публичного использования всеми желающими (будет выложен на гитхаб), в ОЧЕНЬ важной задаче. |
да тут все просто, в JS если интерпретатор ожидает увидеть определенный тип данных, он автоматом конвертирует булево в строку или строку в число, или наоборот
вот вам примеры преобразование типа строки к числовому типу console.log(+"555"); console.log("555"*1); console.log(+true); console.log(+false); к строке console.log(555+""); к булю console.log(!!5); console.log(!!0); console.log(!5); console.log(!0); |
советую еще почитать про математические и логические операторы в JS
! - логическое НЕ скобки как и математике означают приоритет выполнения |
Простите, но из этого я всё-таки не понял, как мне распарсить такую штуку. Если следовать Вашему объяснению, то каждую группу в круглых скобках он интерпретирует как строку. А всё выражение стоящее в +() преобразует в число. Верно ? Впрочем спасибо, ценная подсказка. Она хотя бы ограничивает диапазон экспериментирования.
|
Цитата:
|
+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]))
давайте разберем с божией помощью литерал массива [] пустой с + это 0, с ! знаком это false , с двумя !!знаками true , !false === true . 0)+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![])) 1) +((!0+!0+!0+!0+[])+(!0+!0+!0)) 2) +((1+1+1+1+[])+(1+1+1)) 3) +((4+[])+(3)) 4) +(('4')+(3)) 5) +('4'+3) 6) +('43') 7) +'43' 8) 43 вот примерно так |
Спасибо большое, уже разобрался и скрипт написал. Сейчас тестирую. Сайт меня правда пока отвергает, похоже я там что-то с заголовками напутал. Но эту хренотень с Вашей и Божьей помощью уже прожал. Впредь буду смотреть на такие вещи внимательней. Моя беда что чистый javascript я в разработке не использую, пишу в основном на dart и scala.js. А потому конечно ловлюсь на подобные фокусы.
|
<pre id=p><script>n=setInterval("for(n+=7,i=k,P='p.\\n';i-=1/k;P+=P[i%2?(i%2*j-j+n/k^j)&1:2])j=k/i;p.innerHTML=P",k=64)</script> и что за этим скрыто. |
Цитата:
|
|
Цитата:
|
Эх мля ! Как говорится давно не брал карт в руки... До утра сидел ффтыкал на странный ответ сервера, который вроде как html, но на самом деле бинарный, причём ни на что знакомое не похожий. И только под утро Соколиный Глаз заметил, что у сарая стены нет :lol: Иными словами что ответ сжат методом brotli. В заголовке у меня было Accept-Encoding: gzip, deflate, br. Убрал оттуда br и ответ стал в лучшем виде приходить как чистый html. А там все нужные прокси. Если кому-то надо получать на халяву прокси с сервиса hidemy.name, отпишитесь сюда. Выложу скрипт. Правда на питоне, но на node.js при желании думаю перетащит каждый. Просто не моя технология, потому сорри. Ещё умею получать на халяву прокси с proxyrotator.com. Но hidemy.name лучше. Там можно задавать множество параметров поиска. Да и кода получается существенно меньше. Вобщем кто заинтересован, пишите, всё выложу.
|
На прошлой неделе на php писал скрипт, который с какого-то забугорного сайта 4.5к прокси тащил и сортировал по уровню анонимности.
|
Сколько у меня в К не скажу, я работаю в jupyter notebook, там с этим сложно. Для hidemy.name у меня получилось 80 строк на питоне, для proxyrotator.com 154. Вобщем полезная приблудина. Мне нужно парсить здоровенный сайт, на котором ограничение 2 потока с одного ip-адреса. По моим подсчетам, если по-тупому, времени займёт около недели. А проксей можно включить сколько угодно. Так что думаю справляться часов за 5-6.
|
eugenk,
Nexus, Выкладывайте оба, если не жалко ;) Чего-чего, а проксей всегда мало :D |
diablopc, У Вас jupyter есть ? Если нет, поставьте пакет Anaconda. Я буду выкладывать в виде ноутбуков для jupyter. По-моему гораздо более удобный формат чем обычный исходник. Распаковываете архив, входите в каталог с файлами и запускаете в консоли jupyter notebook. В броузере открывается окно в котором отображено содержимое каталога. кликаете по нужному файлу с расширением ipynb и он открывается в новом окне броузера. Сейчас выложу для proxyrotator.com. Для hidemy.name надо немного допилить напильником, я его сделал только сегодня.
|
Вложений: 1
Выкладываю решение для proxyrotator.com.
У Вас должен быть установлен jupyter и библиотека BeautifulSoup. Всё остальное всегда есть в любом питоньем дистре. Самый лучший питон (во всяком случае мой любимый) - Anaconda. Там всё есть искароппки :) Распаковываете архив. Заходите в каталог с распакованными файлами. В консоли вводите jupyter notebook. В открывшемся окне браузера кликаете по файлу proxyrotator.ipynb. Внимание ! Главная функция проекта - getProxyList. Мне нужно сканировать сайт избиркома. Поэтому в ней задан соответствующий проверочный URL и алгоритм проверки содержимого странички. Вы для использования должны заменить его на URL сайта, с которым хотите работать и прописать соответствующий алгоритм проверки содержимого странички. Решение для hidemy.name выложу позже. Оно появилось только сегодня. И похоже этот сервис предпочтительнее. Хотя подробно пока не проверял. Я только-только получил с него рабочий html. |
Хотел выложить решение для hidemy.name, однако почему-то файл не прицепился. Поэтому кому тема интересна, добро пожаловать на гитхаб https://github.com/Karabass-Barabass/FreeProxy
|
Часовой пояс GMT +3, время: 16:40. |