[Python, Data Mining, API] Как лайкать 4000 тысячи девушек в час

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
28-Янв-2021 22:31

ЗачемУ каждого молодого DS в какой то момент времени возникает проблема - очень хочется тяночку, всмысле спарсить тиндер и сделать тематическое моделирование на описаниях профиля.КАКОтвет короткий - легко, вот ссылка на collabДлинный ответ - тиндер обменивается открытым json с https://api.gotinder.com, а в XHR лежит наш x auth key. Остальное - дело техники и библиотеки Response.
ПарсингКод для профиля
import datetime
from geopy.geocoders import Nominatim
AuthKey = ''
# Ключ пихуем сюда
TINDER_URL = "https://api.gotinder.com"
geolocator = Nominatim(user_agent="auto-tinder")
PROF_FILE = "./images/unclassified/profiles.txt"
class Person(object):
    def __init__(self, data, api):
        self._api = api
        self.id = data["_id"]
        self.name = data.get("name", "Unknown")
        self.bio = data.get("bio", "")
        self.birth_date = datetime.datetime.strptime(data["birth_date"], '%Y-%m-%dT%H:%M:%S.%fZ') if data.get(
            "birth_date", False) else None
        self.gender = ["Male", "Female", "Unknown"][data.get("gender", 2)]
        self.images = list(map(lambda photo: photo["url"], data.get("photos", [])))
        self.jobs = list(
            map(lambda job: {"title": job.get("title", {}).get("name"), "company": job.get("company", {}).get("name")}, data.get("jobs", [])))
        self.schools = list(map(lambda school: school["name"], data.get("schools", [])))
        if data.get("pos", False):
            self.location = geolocator.reverse(f'{data["pos"]["lat"]}, {data["pos"]["lon"]}')
    def __repr__(self):
        return f"{self.id}  -  {self.name} ({self.birth_date.strftime('%d.%m.%Y')})"
    def like(self):
        return self._api.like(self.id)
    def dislike(self):
        return self._api.dislike(self.id)
Ничего интересного тут нет, просто ходим по html и тянем то что нужноРабота с API
import requests
TINDER_URL = "https://api.gotinder.com"
class tinderAPI():
    def __init__(self, token):
        self._token = token
    def profile(self):
        data = requests.get(TINDER_URL + "/v2/profile?include=account%2Cuser", headers={"X-Auth-Token": self._token}).json()
        return Profile(data["data"], self)
    def matches(self, limit=10):
        data = requests.get(TINDER_URL + f"/v2/matches?count={limit}", headers={"X-Auth-Token": self._token}).json()
        return list(map(lambda match: Person(match["person"], self), data["data"]["matches"]))
    def like(self, user_id):
        data = requests.get(TINDER_URL + f"/like/{user_id}", headers={"X-Auth-Token": self._token}).json()
        return {
            "is_match": data["match"],
            "liked_remaining": data["likes_remaining"]
        }
    def dislike(self, user_id):
        requests.get(TINDER_URL + f"/pass/{user_id}", headers={"X-Auth-Token": self._token}).json()
        return True
    def nearby_persons(self):
        data = requests.get(TINDER_URL + "/v2/recs/core", headers={"X-Auth-Token": self._token}).json()
        return list(map(lambda user: Person(user["user"], self), data["data"]["results"]))
Тут мы получаем json, разбираем его и тащим все что нам нужно(список юзеров)Кладем все в .csv
import time
import pandas as pd
df = pd.DataFrame()
prf = []
prsn= []
vuz = []
gender = []
job = []
if __name__ == "__main__":
    token = AuthKey
    api = tinderAPI(token)
    while True:
        persons = api.nearby_persons()
        for person in persons:
           #тут нет логики, напишите сами если захотит
            print(person)
            time.sleep(1)
            person.dislike()
            prf+=[person.bio]
            prsn+=[person]
            vuz+=[person.schools]
            job+=[person.jobs]
            gender+=[person.gender]
            print(person.bio)
df['vuz'] = vuz
df['jobs'] = job
df['person'] = prsn
df['bio'] = prf
df['gender'] = gender
df.to_csv('tinder.csv')
Когда кончаются пользователи оно вылетает и не сохраняет, по этому нужно выделять код для сохранения в отдельную ячейку кода. Благо collab позволяет не думать, а делать. Более опытные пользователи могут сказать что надо обложить в try: , но мне не хочется, да и смысла нет.Два часа спустя получаем все что хотели!!
Спасибо за прочтение, скоро будет вторая часть про тематическое моделирование с помощью BERTБольшое спасибо я хочу сказать своим подписчикам в телеграмме Так же в моем телеграмме есть много ноутбуков и статей про DS и не очень. Например рендер 3д моделей на https://colab.research.google.com/ А в рубрике #чтивонаночь я рассказываю про самое интересное1 что я нашел за последние время.Код - https://colab.research.google.com/drive/1ap8pUgoYAT...lTo=LQVYr9HM88Ph
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_python, #_data_mining, #_api, #_python, #_datamining, #_parsing, #_python, #_data_mining, #_api
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 14:28
Часовой пояс: UTC + 5