Рубрики
Без рубрики

Keggrabbing.py проанализировал строку – Aaron Swartz Jstor Script

Аарон Сварц был программистом и политическим активистом, который неизменно загрузил около 4,8 мельницы … Помечено Python, Web Scraping, Aaron Swartz, MIT.

Аарон Сварц был программистом и политическим активистом, который неизменно загрузил примерно 4,8 миллиона статей из базы данных JSTOR академических статей. Это привело его к ответственности Соединенными Штатами.

В документальном фильме «Собственный мальчик Интернета» о Аароне Сварце есть сценарий, который ссылается на Keegrabbing.py. Этот скрипт – это то, что Aaron используется для объема копирования PDFS из базы данных JSTOR из в сети MIT.

Когда впервые увидели документальный фильм, я был очарован идеей, что простая компьютерная программа может привести к такой фуроре. Естественно, я хотел знать, что было в программе. Оказывается, эта программа является просто простым сценарием Python 2, то есть только 21 строки длиной (17, если вы не включаете пустые строки!)

Вот выдержка из документального фильма, в котором кратко обсуждается сценарий.

https://www.youtube.com/watch?v=j0DLmgmh2N8

Мне удалось найти скрипт онлайн. Но я не сразу понял это. Я получил генерал-супер, но было несколько вещей, которые я не видел раньше, как один класс, который aaron определяет, что это просто исключение, которое, кажется, просто ничего не делает. Существует также URL-адрес, который был отреагирован судами, которые дополнительно заставляют эту программу трудно понять.

Итак, давайте просматриваем программу и попробуйте поймать ее по линии.

Вот файл keggrabbing.py:

“ “ “ Import Subprocess, Urllib, NOBLOCKS Случайные классы (исключение): Pass Def GetBlocks (): .URLOPEN («HTTP://{? Redacted?}/Grab») .read (), если «

Импорт SYS Если len (sys.argv)> 1: префикс = [‘–socks5’, sys.argv [1]] остальное: префикс = [] # ‘- Интерфейс’, ‘eth0: 1’] x: [‘Curl’] + префикс + [‘-H’, “cookie: http://www.jstor.org/stable/pdfplus/ ” + STR (x) + “]

Пока 1: () для блока в блоках: подпроцесс блока печати. Popen (линия (блок)). Ждать () “ “

Это написано в Python2. Я потому, что у нас нет URL, который отреагировал, некоторые примечания здесь – моя лучшая интерпретация.

Импорт:

  • Подпрокат – позволяет создавать новые процессы из сценария Python. Подпроцессы – это детские процессы, созданные из другого процесса.
  • Urllib – позволяет получать ресурсы от URL.
  • Случайные – генерирует псевдослучайные числа (то есть не по-настоящему случайные числа)
  • sys – импортируется позже. Включает доступ к параметрам и функциям, специфичным для машины, который выполняет код.

Импорт подпроцесс, Урлыб, случайный

После небольшого расследования я понял, что в однострочном классе Nooblocks, что Аарон включал в этот скрипт, был способом прекращения скрипта (больше на это позже).

Учебные ноблоки (исключение): проходить

Следующий бит кода – это метод getBlocks (). Эта функция читает от URL, который был отреагирован судами.

Похоже, эта функция вызывала пользовательский URL, который, вероятно, настроен самим Swartz, который имел список URL-адресов, связанных с PDF для скачивания. Вполне вероятно, что Swartz имел эту настройку страницы, и будет контролировать и изменять его от внешней стороны кампуса MIT, чтобы направить скрипт для загрузки PDFS, которые он хотел. Первая строка в этой функции вызывает URLLLIB.URLOPEN (). Прочитайте и сохраняет реакцию этого вызова в переменной вызов «R». Функция URLOPEN читает с URL и возвращает файловый объект из содержимого внешнего ресурса, который указывает URL. Функция чтения, которая называется это, просто прочитает содержимое байта и возвращает их.

Вторая строка этой функции проверяет, есть ли HTML на полученной странице. Если есть, то он поднимает исключение NOBLOBLOCKS и выходит из скрипта. Вполне вероятно, что URL-адрес, который реагирует просто был текстовым файлом с PDFS Swartz хотел скачать. Когда он хотел остановить сценарий, он может просто поменять этот текстовый файл для HTML-файла, а скрипт выйдут.

Функция разделения просто берет строку и разделяет его в список, и по умолчанию он разделяет строку в каждом пространстве, что делает здесь Aaron.

Def GetBlocks (): .urlopen (“http://{? отредактировал?}/grab”) .read () Если «

Следующие 5 строк кода связаны с привлечением аргументов скрипту из SYS.Argv и, если есть один aute, добавляя его в переменную в виде списка со строкой – SOCKS5 в качестве первой строки в списке.

Обратите внимание, что требуется второй элемент в списке sys.argv, поскольку первый элемент в списке sys.argv – это имя сценария.

Эта переменная префикса будет использоваться в выражении лямбда ниже. По сути, этот префикс используется, чтобы сделать скрипт подключиться к JStor через прокси или только хотя Компьютерное подключение к Интернету (которое Aaron оставило команду, предполагая, что это было соединение Ethernet, что имеет смысл в качестве компьютера, который Aaron используется для запуска этого сценария, был в шкафу магазина, подключенным к сети MIT)

Эта линия может означать, что Aaron может запустить этот скрипт из-за пределов сети MIT, но это просто спекуляция.

Импорт Sys. Если len (sys.argv)> 1: префикс = [‘–socks5’, sys.argv [1]] еще: префикс = [] # ‘- Интерфейс’, ‘eth0: 1’]

Следующая строка объявляет функцию лямбда, которая сохраняется в переменной под названием Line.

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

Это выражение лямбда позже будет использоваться в рамках вызова подпроцесса позже в сценарии. Определяет запрос скручиваемости. Команда CURL – это команда, которая позволяет передавать данные в или из URL-адреса, i.e загрузить или загрузить с URL. Запрос скручиваемости – это прокси-сервер для подключения через (в зависимости от условного выше, как упомянуто). Далее он определяет печенье, которое просто строку случайному 3-значному номеру. Это cookie, сделает сервер, отвечая на этот запрос скручиваемости, думаю, что он исходит от реального пользователя, в отличие от скрипта. Следующая вещь, эта функция определяет вывод этого запроса скручиваемости: имя файла PDF в каталог, называемый PDF. Остальная часть этой лямбда создает URL-адрес PDF, из которого можно загрузить PDF с помощью curl.

Линия х: [‘Curl’] + префикс + [‘-H’, “cookie: http://www.jstor.org/stable/pdfplus/” + STR (x) + “]

Этот следующий раздел кода. Определяет бесконечную петлю, которая является частью кода, которая составляет все остальное.

Сначала он вызывает GetBlocks из ранее и сохраняет результирующий список PDF для переменной под названием блоков. Затем он итализает над этим, печатая их в консоль, а затем вызывая линию Lambda с ранее в подпроцессе. Popen Call. Пополнение подпроцесса создаст новый процесс, в этом случае запрос скручиваемости, который загрузит текущий PDF. Затем скрипт заблокирует до тех пор, пока этот подпроцесс не закончит, то есть он ждет, пока PDF не закончится загрузка, а затем он перейдем к следующему PDF.

Пока 1: () Для блока в блоках: печатный блок подпрокат. POPEN (линия (блок)). Ждать ()

Вот и все!

Я также сделал видео, в котором я прохожу через этот код, если такого рода вещи плавают вашу коз:

Оригинал: “https://dev.to/shanelee/keepgrabbing-py-analysed-line-by-line-aaron-swartz-jstor-script-fk4”