Для просмотра содержимого вам необходимо авторизоваться.
Последнее редактирование:
VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.
на сколько % ?
35%на сколько % ?
Спасибо
подскажи как готовый код на линуксе запустить?Для тех кто проголодался:
Скрытое содержимое
/usr/bin/ld:delivery: file format not recognized; treating as linker script
/usr/bin/ld:delivery:1: syntax error
collect2: error: ld returned 1 exit status
установить питон на машину, поставить все зависимости, те модули которых нет в стандартной сборке питона, ну и запустить в терминале скрипт.подскажи как готовый код на линуксе запустить?
питон стоит, но вот какие модули и зависимости ставить?установить питон на машину, поставить все зависимости, те модули которых нет в стандартной сборке питона, ну и запустить в терминале скрипт.
Я написал какие библиотеки использовал.питон стоит, но вот какие модули и зависимости ставить?
Годнота.ТС спасибоДоброго времени суток!
Сегодня я расскажу как написать скрипт на Python 3.6, который будет собирать 35% промокоды для DeliveryClub.
Итак, у нас есть сайт, где раздают одноразовые промокоды для DeliveryClub: https://dtf.ru/cheatsconsole/check?value=food
Нам нужно сделать запрос по этому адресу и получить json(словарь в Python) с нашим промокодом.
Используемые библиотеки:
- requests
- json
- time
- bs4
- fake_useragent
- socks
- socket
1. Наш первый запрос
Доступ к веб-страницам позволяет получать модуль requests. Подключим его.
За компанию подгрузим ещё json, чтобы получить ответ в виде словаря.
Python:import requests import json def req(): url = 'https://dtf.ru/cheatsconsole/check?value=food' response = requests.get(url) # Обращаемся к сайту, пока не придет ответ while response.status_code != 200: response = requests.get(url) # Возвращаем ответ в виде json return response.json() if __name__ == '__main__': print(request())
В ключе data находится еще один словарь с ключом promocode, он то нам и нужен, а точнее его содержимое!
2. Достаем промокод из словаря
Напишем функцию для парса значения ключа promocode.
И добавим проверку на существование этого ключа!
Python:def parse_response(response): # Проверка существования promocode в data if "promocode" in response["data"].keys(): # Добавляем значение ключа promocode в переменную promocode = response["data"]["promocode"] return promocode else: return None
Обновим ifmain:
Python:if __name__ == '__main__': promocode = parse_response(req()) print(promocode)
Запускаем и видим нашу первую проблему, что у нас не нашлось промокода.
(Вселенная бесконечна, а промокоды нет) При повторных запросах будет показывать тот же промокод либо, вообще ничего.
3. Меняем User-Agent
Попробуем выяснить, почему так происходит. Для этого проверим, как выглядел финальный запрос,
отправленный нами на сервер, а конкретнее — как выглядел наш User-Agent в глазах сервера. Добавим в функцию запроса пару строк:
Python:def req(): url = 'https://dtf.ru/cheatsconsole/check?value=food' response = requests.get(url) for key, value in response.request.headers.items(): print(key+': '+value) # Обращаемся к сайту, пока не придет ответ while response.status_code != 200: response = requests.get(url) # Возвращаем ответ в виде json return response.json()
Похоже, мы дали понять серверу, что мы сидим на питоне и используем библиотеку requests под версией 2.20.1.User-Agent: python-requests/2.20.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Скорее всего, это вызвало у сервера некоторые подозрения относительно наших благих намерений и он не решил отдать нам свой промокод.
К счастью, никто нам не мешает притвориться человечными и пустить пыль в глаза сервера при помощи генерации фейкового юзер-агента.
Библиотек, которые справляются с такой задачей, существует очень и очень много, лично мне больше всего нравится fake-useragent.
При вызове метода из различных кусочков будет генерироваться рандомное сочетание операционной системы, спецификаций и версии браузера, которые можно передавать в запрос:
Python:# Подгружаем один из методов этой библиотеки from fake_useragent import UserAgent
Исправим функцию req:
Python:def req(): url = 'https://dtf.ru/cheatsconsole/check?value=food' response = requests.get(url, headers={'User-Agent': UserAgent().chrome}) # Обращаемся к сайту, пока не придет ответ while response.status_code != 200: response = requests.get(url, headers={'User-Agent': UserAgent().chrome}) # Возвращаем ответ в виде json return response.json()
Но этого будет недостаточно, нужно менять IP!
4. Меняем IP
Конечно, как вариант можно было бы использовать прокси-сервера, тогда мы бы имели в запасе некоторое количество разных IP адресов, которые можно было бы менять.
Однако в этом подходе есть пара проблем: первая — нужно где-то раздобыть эти прокси, вторая — а что если ограниченного числа адресов нам не хватит и нужно больше?
В таком случае лучше всего нам подойдет Tor.
Для начала полюбуемся на свой ip-адрес. Для этого напишем функцию, которая делает get-запрос к сайту и возвращает наш IP. Подключив библиотеку bs4:
Python:def check_ip(): ip = requests.get('http://checkip.dyndns.org').content soup = BeautifulSoup(ip, 'html.parser') return soup.find('body').text[20:]
Заменить свой IP через Tor можно двумя путями. Простой — через браузер, а сложный — через небольшие махинации с настройками.
Скачаем браузерный tor, чтобы лёгкий путь был совсем прост. Теперь запускаем свежескачанный браузер и оставляем его открытым.
Менять IP нам поможет библиотека PySocks. Конечно же, её нужно установить, скопировав в терминал pip3 install PySocks.
Браузер Тор по умолчанию использует порт номер 9150. В питоне при помощи библиотек socks и socket (импортируем их) можно задать дефолтный порт для подключения.
В результате текущая сессия будет использовать именно этот порт при отправке любого запроса, а значит – запросы будут посылаться из-под запущенного тора.
Добавим пару строк в начало ifmain:
Запускаем функцию check_ip и видим наш новый IP!Python:socks.set_default_proxy(socks.SOCKS5, "localhost", 9150) socket.socket = socks.socksocket
Тор-браузер меняет IP каждые 10 минут. Нам нужно менять адрес каждый запрос.
Для этого в папке, куда был установлен Tor найдём файл с настройками под названием torrc (на окнах он лежит по адресу \Browser\TorBrowser\Data\Tor\torrc) и отредактируем его.
Добавив эти строки:
Минимально возможный период для обновления IP составляет 10 секунд так что нам придется засыпать и делать проверку на новый адрес.CircuitBuildTimeout 10
LearnCircuitBuildTimeout 0
MaxCircuitDirtiness 10
5. Последние штрихи
Импортируем последнюю на сегодня библиотеку time.
Добавим в наш код функцию записи промокода в файл и основную функцию.
Python:def record_promocode(promocode): # Открываем txt на дозапись with open('promocode.txt', mode='a', encoding='utf-8') as f: # записываем промокод в файл f.write(promocode + '\n') def main(): socks.set_default_proxy(socks.SOCKS5, "localhost", 9150) socket.socket = socks.socksocket # Предыдущий IP и промокод previous_ip = '' previous_promocode = '' while True: ip = check_ip() # Если IP другой if ip != previous_ip: # Делаем запрос promocode = parse_response(req()) # Помечаем IP старым previous_ip = ip # Если промокод существует и такого промокода не было раньше if promocode != None and promocode != previous_promocode: # Записываем промокод в файл record_promocode(promocode) # Помечаем промокод старым previous_promocode = promocode # Выводим данные в консоль print(f' PROMOCODE: {promocode} | IP: {ip}') # Засыпаем на 10 секунд time.sleep(10) else: # Иначе спим 2 секунды time.sleep(2)
Весь код с основными пояснениями:
Код:import requests import json import time from fake_useragent import UserAgent from bs4 import BeautifulSoup import socks import socket def check_ip(): ip = requests.get('http://checkip.dyndns.org').content soup = BeautifulSoup(ip, 'html.parser') return soup.find('body').text[20:] def req(): url = 'https://dtf.ru/cheatsconsole/check?value=food' response = requests.get(url, headers={'User-Agent': UserAgent().chrome}) # Обращаемся к сайту, пока не придет ответ while response.status_code != 200: response = requests.get(url, headers={'User-Agent': UserAgent().chrome}) # Возвращаем ответ в виде json return response.json() def parse_response(response): # Проверка существования promocode в data if "promocode" in response["data"].keys(): # Добавляем значение ключа promocode в переменную promocode = response["data"]["promocode"] return promocode else: return None def record_promocode(promocode): # Открываем txt на дозапись with open('promocode.txt', mode='a', encoding='utf-8') as f: # записываем промокод в файл f.write(promocode + '\n') def main(): socks.set_default_proxy(socks.SOCKS5, "localhost", 9150) socket.socket = socks.socksocket # Предыдущий IP и промокод previous_ip = '' previous_promocode = '' while True: ip = check_ip() # Если IP другой if ip != previous_ip: # Делаем запрос promocode = parse_response(req()) # Помечаем IP старым previous_ip = ip # Если промокод существует и такого промокода не было раньше if promocode != None and promocode != previous_promocode: # Записываем промокод в файл record_promocode(promocode) # Помечаем промокод старым previous_promocode = promocode # Выводим данные в консоль print(f' PROMOCODE: {promocode} | IP: {ip}') # Засыпаем на 10 секунд time.sleep(10) else: # Иначе спим 2 секунды time.sleep(2) if __name__ == '__main__': main()
Проверь свою версию Python!пишет при запуске.Bash:print(f' PROMOCODE: {promocode} | IP: {ip}') ^ SyntaxError: invalid syntax
кто проверял вообще?
python --version
код написан на python 3. Причём по умолчанию в сборке линукс стоит уже питон. Но второй версии. Он используется системой, его удалять не надо. Нужно поставить ещё и третий питон. И запускать через указание на какой версии написан код. т. е для запуска скрипта писать python3 main. py ну и зависимости тоже ставить через pip3 install requests к примеру.пишет при запуске.Bash:print(f' PROMOCODE: {promocode} | IP: {ip}') ^ SyntaxError: invalid syntax
кто проверял вообще?
да, да. знаю, пробовал. всё равно точно такая же ошибка.код написан на python 3. Причём по умолчанию в сборке линукс стоит уже питон. Но второй версии. Он используется системой, его удалять не надо. Нужно поставить ещё и третий питон. И запускать через указание на какой версии написан код. т. е для запуска скрипта писать python3 main. py ну и зависимости тоже ставить через pip3 install requests к примеру.
Можете переписать на:да, да. знаю, пробовал. всё равно точно такая же ошибка.
ладно, сам разберусь.
print("Promocode: "+ promocode + " IP: " + ip)
Там нечего ускорять, стоят паузы, потому что IP меняется только раз в ~10 секунд. (сильно не ускоришь)Можете переписать на:
print("Promocode: "+ promocode + " IP: " + ip)
Это равносильно тому что написано у ТС, но в упрощённой форме.
[automerge]1547574268[/automerge]
Можно не хило ускорить используя: async + aiohttp + lxml. Тогда он будет жарить.