Барыга на минималках
-
Автор темы
- #1
Язык: python3 (проверял на 3.6 и 3.8) с модулями requests и lxml
Все ссылки являются примерами
Сайт, который мы будем парсить, должен иметь
блок последних покупок (
Иногда этот блок просто скрыт и его можно найти через код страницы/запросы
(
Обычно сайты бывают двух типов:
Для ленивых я создал мини-проект (осторожно говнокод)
Запускаем main.py и смотрим на результат, так же все найденые ники он сохраняет в sqlite базу по пути /parsers/nicks.db (
Пишите какие сервера добавить в общий парсер ( или присылайте уже готовые парсеры ) на данный момент есть:
Все ссылки являются примерами
Сайт, который мы будем парсить, должен иметь
блок последних покупок (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)Иногда этот блок просто скрыт и его можно найти через код страницы/запросы
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
) Обычно сайты бывают двух типов:
- Рендер на сервере
- Ajax рендер
Для примера возьму популярный сервер JetMine.
Для начала нам надо открыть меню DevTools ctrl+shift+i (в chrome) и открыть сайт
во вкладке Network мы ищем запросы которы содержат json код последних покупок
во вкладке Headers смотрим URL (в данном случае это
приступим к написанию кода
в ответ мы получаем это:
Эти данные мы можем сохранить и продолжать парсить, проверяя на совпадения.
Для начала нам надо открыть меню DevTools ctrl+shift+i (в chrome) и открыть сайт
во вкладке Network мы ищем запросы которы содержат json код последних покупок
во вкладке Headers смотрим URL (в данном случае это
Пожалуйста, авторизуйтесь для просмотра ссылки.
)приступим к написанию кода
Python:
import requests
def main():
# Выполняем запрос к сайту
data = requests.get("https://jetmine.ru/api/page/main/load")
# Проверяем статус выполнения запроса
if data.status_code != 200:
return
# Преобразование ответа сервера в словарь
data = data.json()
# Проверка просто так (сервер же нам дал такое поле)
if not data['success']:
return
# Нас интересуют только последние покупки значит будем проходить по этому списку
for i in data['latestTransactions']:
# Сервер дает информацию по типу покупки
# И содержит более подробное описание к примеру тип case и описание money
# Но если тип unban описания уже не будет
# Чтобы избежать исключения проверяем на соответствие типам case и group
if i['donateType'] in ['group', 'case']:
# Если необходимо описание то просто добавим его к типу
i['donateType'] = i['donateType'] + ' '+ i['donateValue']
# Теперь выведем нужную информацию
print(i['donateType'], i['username'])
if __name__ == '__main__':
main()
Эти данные мы можем сохранить и продолжать парсить, проверяя на совпадения.
Тут будет сложнее, но начало такое же как и с Ajax'ом
Проверив запросы, мы понимаем, что страница приходит нам сразу с готовыми донатерами.
И мы вынуждены разобрать страницу
Как пример возьму SunMine
Выделю текст последней покупки нажму лкм и просмотреть код и скопирую full xpath нужных мне элементов, а именно ник и сам донат
Выделяя другие элементы из списка последних покупок пойму что
/html/body/main/section[8]/div/div/div[2]/div[1]/div[3]/span изменяется от 1 до 3
Далее можно приступить к написанию кода
И теперь нас встречают знакомые
Проверив запросы, мы понимаем, что страница приходит нам сразу с готовыми донатерами.
И мы вынуждены разобрать страницу
Как пример возьму SunMine
Выделю текст последней покупки нажму лкм и просмотреть код и скопирую full xpath нужных мне элементов, а именно ник и сам донат
/html/body/main/section[8]/div/div/div[2]/div[1]/div[2]/span
- Ник/html/body/main/section[8]/div/div/div[2]/div[1]/div[3]/span
- ДонатВыделяя другие элементы из списка последних покупок пойму что
/html/body/main/section[8]/div/div/div[2]/div[1]/div[3]/span изменяется от 1 до 3
Далее можно приступить к написанию кода
Python:
import requests
# Библиотека для удобного парса страниц
from lxml import html
def main():
# Выполняем запрос к сайту
data = requests.get("https://sunmine.su/")
# Проверяем статус выполнения запроса
if data.status_code != 200:
return
# Преобразование ответа сервера в объект верстки
tree = html.fromstring(data.content)
for i in range(1, 4):
# Получить ник через xpath
nick = tree.xpath(f'/html/body/main/section[8]/div/div/div[2]/div[{str(i)}]/div[2]/span')[0].text
# Получаем строку по типу "[Создатель], в 17:27"
group = tree.xpath(f'/html/body/main/section[8]/div/div/div[2]/div[{str(i)}]/div[3]/span')[0].text
# Из этой строки нам нужна только сама группа поэтому используем
group = group.split(',')[0]
print(group, nick)
if __name__ == '__main__':
main()
Для ленивых я создал мини-проект (осторожно говнокод)
Пожалуйста, авторизуйтесь для просмотра ссылки.
Распаковываем в любую папку.Запускаем main.py и смотрим на результат, так же все найденые ники он сохраняет в sqlite базу по пути /parsers/nicks.db (
Пожалуйста, авторизуйтесь для просмотра ссылки.
)Создаем файл по такому шаблону
и переносим его в папку /parsers/
main.py перезапускать не обязательно
Советую сначала запарсить отдельным приложением с выводом в консоль, а потом уже добавлять в общее приложение
Python:
import requests
import basechecker
def main():
# Инициализация класса для базы данных
db = basechecker.DataBase()
data = requests.get("https://jetmine.ru/api/page/main/load")
if data.status_code != 200:
return
data = data.json()
if not data['success']:
return
for i in data['latestTransactions']:
if i['donateType'] in ['group', 'case']:
i['donateType'] = i['donateType'] + ' '+ i['donateValue']
# Проверка есть ли этот пользователь в базе
# Обязательно указывайте разные имена для серверов
# Чтобы их можно было отличить
if not db.inBase('jetmine', i['username'], i['donateType']):
# Если его там нет, то добавляем
db.add(server='jetmine', nick=i['username'], donate=i['donateType'])
if __name__ == '__main__':
main()
main.py перезапускать не обязательно
Советую сначала запарсить отдельным приложением с выводом в консоль, а потом уже добавлять в общее приложение
- JetMine
- FaweMc
- BearMc
- SunMine
- WellMore
- MinePirate
Последнее редактирование: