Category: общество

Ротируем прокси в Python

Унылые люди из различных проектов зачем-то пытаются закрыть от нас с вами свои данные. Один из любимых способ закрыться, но сохранить реноме, что мы, дескать, открытые - закрытие через API с ограничением количества запросов или просто защита сайта через определенное ограничение запросов. Что б не делать, только б не выкладывать нормальные православные дампы.

Возьмем к примеру такой сайт как РеформаЖКХ. Государство наладило сбор данных по ЖКХ на наши с вами налоги и даже нарисовало стандарт раскрытия. Данные ценные, пригодились бы в массе приложений. Пока все хорошо. Но потом начинается, сначала данные доступны только через веб-страницы, ладно, нужно грабить-скрэйпить, это криво, но терпимо. Дальше хуже, администрация решает, что скажем запрос в секунду, это много и ограничивает их количество через капчу. Старые скрипты перестают работать конечно же.

И всё это вместо того, чтобы выложить чёртовы дампы.

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

Задача: скачать странички сайта защищенного капчей.
Решение: ротирующиеся прокси (основано на этом рецепте, с небольшими изменениями порта прокси и конфига, иначе не работает).

По шагам.

1. Ставим requesocks, stem для Python (pip install requesocks).

2. Ставим Tor Browser

3. Редактируем файл c:\tools\Tor Browser\Browser\TorBrowser\Data\Tor\torrc Делаем так, чтобы там присутствовала такая секция:
SocksPort 9150 IPv6Traffic PreferIPv6 KeepAliveIsolateSOCKSAuth
ControlPort 9151
HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
CookieAuthentication 1

9151 это порт, который открывает Tor
HashedControlPassword это захэшированное слово password, пароль который мы дальше будем использовать в коде.

4. Запускаем Tor Browser, он просто будет висеть в памяти.

5. Теперь пишем код на питоне.

Сначала импорты, понадобятся пакеты requesocks, stem, не забываем их заранее установить:

import requesocks
from stem import Signal
from stem.control import Controller

Такой запрос пойдет через прокси сделанный тором и выдаст IP отличный от нашего настоящего:

session = requesocks.session()
session.proxies = {'http': 'socks5://127.0.0.1:9150',
'https': 'socks5://127.0.0.1:9150'}

print session.get("http://httpbin.org/ip").text


А так можно эти прокси менять по мере надобности:

from stem import Signal
from stem.control import Controller
with Controller.from_port(port = 9151) as controller:
controller.authenticate(password="password")
controller.signal(Signal.NEWNYM)

print session.get("http://httpbin.org/ip").text


В принципе это все что нам нужно, теперь мы можем просто делать так:

1. Отправить запрос
2. Проверить появилась ли в ответе капча.
2а. Если да, сменить прокси, перейти к 1.
2б. Если нет, распарсить.

Работает медленнее, чем напрямую, но работает автономно.

Fake it till you make it

Дискуссии на тему "во всём виноват Запад" часто оказываются аналогичными: "У меня в гараже живёт дракон". Это название притчи Карла Сагана, которая является главой из его книги The Demon-Haunted World. Искал её на русском одним куском, но так и не смог найти, поэтому перевёл сам. А Ане спасибо за корректуру.

Оригинал: http://www.godlessgeeks.com/LINKS/Dragon.htm

"В моём гараже живет огнедышащий дракон", Карл Саган.

Представьте, что я (применяя методы групповой терапии психолога Ричарда Франклина) с полной серьезностью делаю такое заявление. Конечно вы захотите это проверить, сами посмотреть на дракона. За предыдущие века накопилось бесчисленное количество историй про драконов, но никаких вещественных доказательств. Вот она - возможность!

Вы говорите: "Показывай", и я веду вас в свой гараж. Заглядываем внутрь: там лестница, пустые банки из-под краски, старый велосипед - но никакого дракона.

Вы: "А где дракон?"

Я: "О, он прямо здесь", и показываю куда-то в сторону. "Забыл сказать, дракон - невидимый".

Вы предлагаете разбросать муку на полу гаража, чтобы дракон оставил следы.

Я говорю: "Классная идея, но дракон парит в воздухе".

Вы предлагаете использовать инфракрасный датчик, чтобы засечь невидимый огонь.

"Здорово, но невидимый огонь не выделяет тепла."

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

"Хорошая идея, но он бестелесный и краска не прилипнет." И так далее.

Каждый предлагаемый материальный эксперимент я парирую специальным объяснением, почему он не сработает.

В чем же разница между невидимым, бестелесным, парящим в воздухе драконом и несуществующим драконом? Если нет способа опровергнуть моё утверждение и нельзя придумать эксперимент, который бы дал необходимую информацию против, то что вообще означает утверждение, что мой дракон существует? Ваша неспособность опровергнуть мою гипотезу не является подтверждением ее истинности. Утверждения, которые не могут быть проверены, определения, которые невозможно опровергнуть, - бесполезны для постижения истины, как бы сильно они ни вдохновляли нас или возбуждали нашу тягу к чудесам. То, о чём я прошу, сводится просто к вере, без каких-либо доказательств, вере мне на слово. Единственное, что вы почерпнули из моих настойчивых утверждений про дракона в гараже, - это то, что у меня что-то не так с головой. Вы можете задуматься о том, что же убедило меня, если материальные эксперименты неприменимы. Неминуемо возникнут предположения, что это был сон или галлюцинация. Но почему тогда я воспринимаю их так серьезно? Может мне нужна помощь? Или, может быть, я серьезно недооценил человеческую способность ошибаться? Представьте, что хотя эксперименты ничего не подтверждают, вы всё равно захотите быть максимально открытым и просто отложите окончательное решение по этому вопросу. Да, текущие факты выступают против, но если появятся новые данные, то вы готовы их оценить и решить, насколько они убедительны. Конечно, с моей стороны было бы несправедливо оскорбляться тому, что вы не хотите мне верить, или критиковать вас за занудство и отсутствие воображения только за вынесение вердикта: "Не доказано".

Представьте, что все пошло иначе. Дракон действительно невидим, но оставляет следы на муке, инфракрасный датчик зашкаливает, распылитель краски обнаруживает плавающий перед вами в воздухе зубчатый гребень. Не важно, насколько вы скептически настроены по отношению к существованию драконов -- не говоря уже о невидимых -- вы должны признать, что что-то тут есть и предварительно можно сказать, что это согласуется с невидимым, огнедышащим драконом.

Теперь другой сценарий: предположим, что это не только я. Предположим, что несколько ваших знакомых, включая людей, про которых вам точно известно, что они не знают друг друга, начинают рассказывать про драконов в своих гаражах - и везде отсутствуют доказательства. Все мы признаем, что несколько ненормально верить в такую странную вещь, не подтвержденную физическими доказательствами. Мы не сумасшедшие. Мы думаем о том, что на самом деле бы означало для человечества существование драконов, прячущихся в гаражах по всему миру. Что касается меня, лучше бы это не было правдой. Но, может быть, все эти древние мифы Европы и Китая о драконах вовсе не мифы?

Наконец-то стали поступать свидетельства появления следов драконов на муке. Но почему-то они никогда не появляются в присутствие скептика. Альтернативное объяснение кажется очевидным. Более пристальное изучение следов показывает, что их могли подделать. Еще один любитель драконов показывает обожженый палец и заявляет о том, что стал жертвой редкого физического проявления огненного дыхания дракона. Но, снова, есть и другие объяснения. Мы понимаем, что есть и другие способы обжечь палец, кроме как попасть под дыхание невидимых драконов. Такие "доказательства" - не важно, насколько серьезными их считает любитель драконов, - далеки от убедительных. Опять же, единственный осмысленный подход заключается в предварительном опровержении гипотезы о драконе, оставаясь открытым к новым данным в будущем и задаваясь вопросом, в чем может быть причина того, что столько вроде бы здравомыслящих и трезвых людей разделяют одну и ту же странную иллюзию.

Досрочное голосование и организация выборов

Аццкий ад конечно, как у нас выборы организованы, чтобы проголосовать досрочно по весьма уважительной причине (собственно я ПРГ на другом участке), надо пройти круги ада, чтобы выяснить где вообще можно голосовать досрочно.

В области проходят сразу пачки выборов, у нас выбираются депутаты в Совет депутатов сельского поселения и выборы главы района. С выборами в Совет еле-еле разобрался позвонив сначала в ИК Московской области (+7495606-6351), а потом в её же "отдел по организации выборов" (+74956060742). После выяснений оказалось, что голосовать нужно не на своем УИКе, а в Муниципальной избирательной комиссии располагающейся в администрации поселения.

С главой района сложнее. Звонил в свой УИК (школа), отвечает женщина не член комиссии, ничего по досрочному голосованию сказать не может, позвать никого из членов не может (якобы они все на уроках), заявление на голосование на дому соответственно тоже принять не может (хотя оно мне и не надо).

Одинцовский ТИК на официальный телефон (+7495599-0404) не отвечает. Координатор по району от Гражданина Наблюдателя где ТИК не знает и сомневается что он вообще существует. Координатор по Мособласти от Гражданина Наблюдателя тоже где ТИК не знает.

Так и не проголосовал, обидно.

Логирование сигнала с базовых станций GSM - ПО для Android

Нас окружаются базовые станции (БС) GSM. Как правило, наш телефон одновременно "виден" нескольким. Телефон постоянно переподключается, при движении меняется уровень силы сигнала  (измеряется в dBm, децибел-миливатты).

Задача: логировать длительное время сигнал информацию с базовых станций через короткий промежуток времени с пользовательскими засечками.

Идеальная программа должна уметь:

  • устанавливать высокой частоты обновления, скажем 1 сек

  • логирование LAC, CID, даты-времени, мощности сигнала

  • логировать сразу несколько станций (соседей и текущую)

  • логировать в файл в прозрачном формате (CSV), указывать путь до места куда сохранен лог

  • логировать пользовательские засечки

Нужно логировать:

  • LAC - Location Area Code

  • CID - Cell ID

  • MNC - Mobile Network Code

  • MCC - Mobile Country Code

  • RSSI - Received Signal Strength Indication

  • ASU - Arbitrary Strength Unit (тоже самое что и RSSI, но в других единицах: dBm = (2 × ASU) - 113 ASU)


Попробовал следующее ПО:Collapse )

промежуточный ответ от ФСС

Получил промежуточный ответ от ФСС, что они переправили запрос в областное региональное управление, зачем, непонятно, как будто правила разные для разных областей. Ответили 14го по почте, которая пришла 19го. Письмо я отправил 2го, получил ответ что "получено" 4го.

Под катом сам отлуп. Жду дальше.

Collapse )