Русский
Русский
English
Статистика
Реклама

Как лайкать четыре тысячи девушек в час

Зачем

У каждого молодого DS в какой то момент времени возникает проблема - очень хочется тяночку, всмысле спарсить тиндер и сделать тематическое моделирование на описаниях профиля.

Как

Ответ короткий - легко, вот ссылка на collab

Длинный ответ - тиндер обменивается открытым json с https://api.gotinder.com, а в XHR лежит наш x auth key. Остальное - дело техники и библиотеки Response.

Парсинг

Код для профиля

import datetimefrom geopy.geocoders import NominatimAuthKey = ''# Ключ пихуем сюда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 requestsTINDER_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 timeimport pandas as pddf = 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'] = vuzdf['jobs'] = jobdf['person'] = prsndf['bio'] = prf df['gender'] = genderdf.to_csv('tinder.csv')

Когда кончаются пользователи оно вылетает и не сохраняет, по этому нужно выделять код для сохранения в отдельную ячейку кода. Благо collab позволяет не думать, а делать. Более опытные пользователи могут сказать что надо обложить в try: , но мне не хочется, да и смысла нет.

Два часа спустя получаем все что хотели!!

Спасибо за прочтение, скоро будет вторая часть про тематическое моделирование с помощью BERT

Большое спасибо я хочу сказать своим подписчикам в телеграмме

Так же в моем телеграмме есть много ноутбуков и статей про DS и не очень. Например рендер 3д моделей на https://colab.research.google.com/ А в рубрике #чтивонаночь я рассказываю про самое интересное, что я нашел за последние время.

Код

Источник: habr.com
К списку статей
Опубликовано: 28.01.2021 22:20:35
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Data mining

Api

Datamining

Parsing

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru