Vk api парсер: Как сделать парсер через vk api? — Хабр Q&A

Сбор данных с помощью API Вконтакте

Время прочтения: 3 мин.

Так вот, сделав несколько пробных выборок для анализа, мы поняли, что поиск по фамилии и имени дает слишком ненадежные результаты, т.к. даты рождения многих пользователей скрыты, и даже выгрузив все совпадения по ФИ, вы все равно не сможете потом идентифицировать нужные данные.

Важно: мы заметили, что при поиске по ФИ + ДР Вконтакте выдаст подходящих пользователей, даже если их дата рождения скрыта. Это можно было использовать, только нужно обеспечить связь с данными поискового запроса. Для работы с API VK мы решили использовать Python с библиотекой vk_api (установка: pip install vk_api). Итого нам потребуются 2 библиотеки:

import pandas as pd
import vk_api

Далее – импорт входных данных в формате ID, Имя, Фамилия, Отчество (можно оставить пустым, так как Вконтакте отчество отсутствует), День рождения, Месяц рождения, Год рождения. Пример: (0,Петр,Петрович,,1,1,1950)

data = pd.
read_csv('in.txt', encoding = 'cp1251')

Затем авторизация и получение токена VK:

vk_session = vk_api.VkApi('+79XXXXXXXXXX', 'password')
vk_session.auth()
vk = vk_session.get_api()

После этого мы можем начинать выполнять запросы к API. Полный перечень методов можно найти на странице vk.com/dev/methods.

Разберем для примера использование метода users.search и сохранение полученных результатов. Основные параметры это q – строка поискового запроса, так же для поиска нам понадобятся birth_day, birth_month, birth_year, count – количество результатов (поставим максимум – 1000), fields – список дополнительных полей, в примере укажем ‘bdate, city’. Результат будет возвращен в виде словаря Python. Разберем подробно:

t={} #создаем словарь для хранения данных, получаемых от API VK
for j in range(0, len(data)): #запускаем поиск по массиву
    #Далее следует обращение к API с нашими параметрами:
    t[j]=vk.users.search(q = data['N'][j] + ' ' + data['F'][j], birth_day = data['D'][j], \ birth_month = data['M'][j], birth_year = data['Y'][j], count = 1000, fields='bdate, city')
    for h in (t[j]['items']): #Сохраняем результаты поиска в файл"users.
txt" with open('users.txt','a') as f1: f1.write((str(data['id'][j]) + ';' #ID исходный + str(t[j]['count']) + ';' #Количество найденных пользователей + str(h['id']) + ';' #ID пользователя VK + h['last_name'] + ';' #Фамилия + h['first_name'] + ';' #Имя + h.get('bdate','') + ';' #Дата рождения + h.get('city',{}).get('title','') #У города несколько параметров - нам нужно название: title + ';\n').encode('cp1251', 'replace').decode('cp1251'))#Для удаления нестандартных символов, которые могут вызывать ошибки

Далее мы можем в этом же цикле осуществить поиск и сохранение ID друзей пользователя, за это отвечает метод friends.get. Если друзей нет (или скрыты), метод вернет ошибку, поэтому используем try/except:

try:
    m=vk.friends.get(user_id = str(h['id']), count = 50000)
    for q in m['items']: #Сохраняем ID друзей в файл "friends.txt"
       with open('friends. txt','a') as f2:
           f2.write(str(data['id'][j]) + ';' + str(h['id']) + ';' + str(q) + ';\n')
except: #Если друзей нет (или скрыты) пишем в файл 0 для этого ID
    with open('friends.txt','a') as f2:
        f2.write(str(data['id'][j]) + ';' + str(h['id']) + ';0;\n')

Если мы хотим выполнить большое количество запросов, нужно добавить паузу между ними, например, команда sleep библиотеки time. Без этого учетная запись VK может быть заблокирована. Экспериментальным путем подобраны значения 9 секунд для поиска без друзей и 5 для поиска с друзьями (меньше, т.к. получение и сохранение списка друзей занимает несколько секунд). Производительность при использовании одной учетной записи Вконтакте составляет 8-10 тыс. пользователей в сутки. Полученные результаты сохраняются в файлы users.txt и friends.txt и могут в дальнейшем быть обработаны в БД или средствами Python.

python — Парсинг музыки ВК

Вопрос задан

Изменён 4 месяца назад

Просмотрен 3k раз

Решил сохранить названия своих треков. Узнал о парсинге, поизучал.Смог запарсить обычные сайты с помощью Python. С ВК проблема — Api недоступно(Прикреплена фотография) — https://vk.com/dev/audio_api Инспектор кода не показывает ничего путного, что можно было бы использовать для авторизации Подскажите.

Вот всё , что есть, без авторизации

import requests
from bs4 import BeautifulSoup
r = requests.get('https://vk.com/audios181859003')
html = BeautifulSoup(r.content, 'html.parser')
for el in html.select('.audio_row__title_inner'):
    print(el.text)
  • python
  • python-3.x
  • vkontakte-api
  • вконтакте

Используйте vk_api

Пример кода для загрузки музыки:

 import vk_api
 from vk_api import audio
 vk_session = vk_api.VkApi(login=vk_login, password=vk_password, auth_handler=two_step_auth)
 vk_session.auth()
 vk = vk_session.get_api()
 vk_audio = audio.VkAudio(vk_session)
for i in vk_audio.get(owner_id=v_id):
                try:
                    song += 1
                    r = requests. get(i['url'], stream=True)
                    size = int(r.headers['Content-Length'])
                    if r.status_code == 200:
                        with open(str(song) + '_' + i['artist'] + ' - ' + i['title'] + '.mp3', 'wb') as file:
                            print('Загрузка:', i['artist'] + ' - ' + i['title'])
                            time.sleep(0.5)
                            for data in tqdm(iterable=r.iter_content(chunk_size=1024), total=size / 1024, unit='KB',
                                             leave=True):
                                file.write(data)

9

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Авторизация VK API и приложение Python

Войти

Добро пожаловать! Войдите в свою учетную запись

ваше имя пользователя

ваш пароль

Забыли пароль?

Восстановление пароля

Восстановить пароль

ваш адрес электронной почты

Поиск

Автор

Дата

Категория

Помогите пройти авторизацию в питоне. Есть такой код:

 def main():
  webbrowser.open('http://oauth.vk.com/authorize?client_id='+APP_ID+'& scope =' + SETTINGS + '& redirect_uri =' + REDIRECT_URI + '& display =' + DISPLAY + '& тип_ответа = токен')
 

В браузере вводится логин/пароль и запрашивается разрешение, но как после всего этого вытащить токен и ID пользователя из браузера?


Ответ 1, полномочия 100%

Я решил вашу проблему некоторое время назад. Короче говоря, вы можете анализировать страницы входа и отправлять формы без использования браузера. Подробное описание решения можно найти в статье. Исходники модуля находятся на github. В модуле используются только стандартные модули Python, поэтому он должен работать практически везде без лишних телодвижений.


Ответ 2, полномочия 99%

Смысл авторизации через сторонний сервис (в данном случае OAuth 2) следующий:

  1. На сервисе (в данном случае ВК) необходимо зарегистрировать приложение и получить API-ключ.
  2. После этого приложение (сайт) может сделать запрос персональных данных пользователя у стороннего сервиса через этот же API, для чего:
    • перенаправить пользователя (браузер пользователя, отправив ему HTTP-ответ 302 Redirect) на специально сформированную ссылку (из вашего сообщения) на сервис, предоставляющий API;
    • пользователь выполнит там какие-то действия, предположительно авторизуется и разрешит доступ к данным;
    • по завершению действий пользователь будет перенаправлен сторонним сервисом через тот же 302 Redirect на URL, переданный в параметрах специально сформированной ссылки (в данном случае это '&redirect_uri =' + REDIRECT_URI ).
  3. Пользователь попадает по самой ссылке вашего возврата на сайт. И если пользователь согласился предоставить свои данные, хранящиеся на стороннем сервисе, вашему сайту, то эта ссылка в GET параметрах будет содержать ключ доступа к данным пользователя на этом стороннем сервисе, в противном случае она будет содержать код отказа (см.
    документацию по целевому сервису).

В положительной ситуации требуется сохранить этот ключ доступа и использовать его и ключ API в дальнейшем для получения необходимой информации путем прямых запросов приложения к сервису. В зависимости от протокола этот ключ доступа может быть использован для получения другого ключа, с помощью которого уже можно будет работать с пользовательскими данными. В любом случае, после третьего шага участие пользователя уже не требуется и все данные должны отправляться прямыми запросами с вашего сайта на сторонние, например, через urllib2.urlopen .

Это общий принцип работы, конкретные нюансы следует уточнять в документации для разработчиков из конкретного сервиса. В данном случае это Авторизация сайтов ВКонтакте.


Ответ 3, авторитет 93%

Два варианта.

  1. Советский. Прежде чем отправить пользователя с браузером на сайт, скажите ему «сейчас откроется ваш браузер, вы вводите там свой пароль, соглашаетесь со всем, а затем ручками копируете всю адресную строку сюда в нашу программу».
  2. Буржуй. Используйте какое-то окружение, внутри которого находится компонент браузера. Будь то родное приложение для Windows, написанное на Delphi, или Mac на XCode. В этом случае приложение имеет власть над содержащимся в нем браузером и может в нужный момент получить из него адресную строку.

Ответ 4, полномочия 67%

Токен придет в URL запроса для REDIRECT_URI . Отсюда: Авторизация клиентского приложения

Получить Access_Token

После успешной авторизации приложения
Пользователь браузера будет
Перенаправлен на Redirect_uri , указанный
при открытии диалога
авторизации. При этом ключ доступа к
Access_Token API и другие параметры
будут переданы фрагменту URL ссылки:
http://redirect_uri#access_token=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3& expires_in = 86400 & amp; идентификатор_пользователя = 8492

© Copyright — Газета TagDiv

V2: неопознанная директива: импорт (внутренний маршрут) — Справка

vitalyavolyn (Виталий Волынский)

#1

1. Версия Caddy (

версия Caddy ):

v2.3.0-beta.1

2. Как я управляю Кэдди:

caddy start (просто тестирую мой Caddyfile перед обновлением до v2)

а. Системная среда:

Linux

д. Моя полная конфигурация Caddyfile или JSON:
 my.domain {
  маршрут /апи/* {
    uri strip_prefix /api
    обратный_прокси: 3000
    импорт vkapps-cors
  }
  маршрут /бот/* {
    uri strip_prefix / бот
    обратный_прокси: 3001
  }
}
 

3. У меня возникла проблема: директива

import не работает внутри маршрута 9 .0063

4. Сообщения об ошибках и/или полный вывод журнала:

запуск: адаптация конфигурации с использованием caddyfile: разбор токенов caddyfile для «маршрута»: Caddyfile:60 - Ошибка при разборе: нераспознанная директива: импорт

Я переместил свой импорт оператор выше маршрут , он работает нормально, но я решил, что мне нужно где-то опубликовать эту ошибку. Это предназначено?

франциславское (Фрэнсис Лавуа)

#2

Является ли vkapps-cors файлом? Я не вижу фрагмента, определенного в опубликованном вами Caddyfile. У меня отлично работает, если я определяю фрагмент.

caddyserver.com

Концепции Caddyfile — Документация Caddy

Caddy — это мощный корпоративный веб-сервер с открытым исходным кодом и автоматическим HTTPS, написанный на Go

.

Также можно заменить route и uri strip_prefix всего с handle_path :

 (vkapps-cors) {
кодировать gzip
}
мой.домен {
handle_path/апи/* {
обратный_прокси: 3000
импорт vkapps-cors
}
handle_path /бот/* {
uri strip_prefix / бот
обратный_прокси: 3001
}
ручка {
# Запасной вариант для путей, которые иначе не обрабатываются
}
}
 
caddyserver. com

handle_path (директива Caddyfile) - Caddy Documentation

Caddy — это мощный корпоративный веб-сервер с открытым исходным кодом и автоматическим HTTPS, написанный на Go 9.0004

виталяволын (Виталий Волынский)

#3

Спасибо за подсказку! handle_path намного лучше и import работает внутри него.
К сожалению, я забыл фрагмент:

 (vkapps-cors) {
  заголовок Access-Control-Allow-Headers origin,content-type,accept,x-vk-sign
}
 

Но поместить импортировать внутрь маршрут выдал указанную выше ошибку.

франциславское (Фрэнсис Лавуа)

#4

Я не могу воспроизвести эту проблему. У меня это отлично работает:

Caddyfile:

 (vkapps-cors) {
  заголовок Access-Control-Allow-Headers origin,content-type,accept,x-vk-sign
}
мой.домен {
  маршрут /апи/* {
    uri strip_prefix /api
    обратный_прокси: 3000
    импорт vkapps-cors
  }
  маршрут /бот/* {
    uri strip_prefix / бот
    обратный_прокси: 3001
  }
}
 

 $ кэдди адаптируется --красиво
2020/12/10 21:07:15.202 INFO с использованием соседнего Caddyfile
{
 "Программы": {
 "http": {
 "серверы": {
 "срв0": {
 "слушать": [
 ":443"
 ],
 "маршруты": [
 {
 "соответствовать": [
 {
 "хозяин": [
 "мой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *