Hi,
I am looking for a good VK friendlist scraper. Does someone have one, or build one? PM me.
I am looking for a good VK friendlist scraper. Does someone have one, or build one? PM me.
# возвращает массив объектов друзей
def friends(self, api):
user_friends = api.friends.get(user_id=self.id, order='hints') # возвращает в том порядке, как расположены в разделе Мои
return user_friends
# возвращает количество друзей
def friends_count(self, api):
user_friends = User.friends(self, api)
friends_count = len(user_friends)
return friends_count
You can use VK API with Python:
Python:# возвращает массив объектов друзей def friends(self, api): user_friends = api.friends.get(user_id=self.id, order='hints') # возвращает в том порядке, как расположены в разделе Мои return user_friends # возвращает количество друзей def friends_count(self, api): user_friends = User.friends(self, api) friends_count = len(user_friends) return friends_count
import requests, re, time, traceback
from string import ascii_letters
input_link = input('User link or id: ')
download = input('Do you want to download friends list? (y/n) : ').lower()
class GetVK(object):
def __init__(self, input_user_link=input_link):
self.version = 5.126
self.token_vk = 'YOUR VK TOKEN'
self.input_user_link = input_user_link
self.user_id = self.getNumId()
self.user_name = self.getUserName()
self.friend_ids = self.getFriendIds()
self.friends_info = self.getFriendsInfo()
self.friends_list = []
def main(self):
start = time.time()
print(f'Target: {self.user_name}, parse started...')
self.createFile()
end = time.time()
print(f'Done, time: {end - start}')
def validate(self):
return any(map(lambda c: c in ascii_letters, self.input_user_link))
def getNumId(self):
if re.search(r"\bcom/\b", self.input_user_link):
if '.com/id' in self.input_user_link:
self.input_user_link = self.input_user_link.split('.com/id')[1]
else:
self.input_user_link = self.input_user_link.split('.com/')[1]
if self.validate():
response = requests.get("https://api.vk.com/method/utils.resolveScreenName?",
params={
"screen_name": self.input_user_link,
"access_token": self.token_vk,
"v": self.version,
})
user_id = response.json()["response"]["object_id"]
else:
user_id = self.input_user_link
return user_id
def getUserName(self):
response = requests.get("https://api.vk.com/method/users.get?",
params={
"access_token": self.token_vk,
"v": self.version,
"user_id": self.user_id
})
fName_data = response.json()["response"][0]['first_name']
lName_data = response.json()["response"][0]['last_name']
return fName_data + " " + lName_data
def getFriendIds(self):
response = requests.get("https://api.vk.com/method/friends.get?",
params={
"access_token": self.token_vk,
"v": self.version,
"user_id": self.user_id
})
return response.json()["response"]["items"]
def getFriendsInfo(self):
response_name = requests.get(f"https://api.vk.com/method/friends.get?",
params={
'user_id': self.user_id,
'access_token': self.token_vk,
'v': self.version,
'fields': 'nick'
})
return response_name.json()['response']['items']
def createFile(self):
if download == 'y':
file_name = f"{self.user_name}.txt"
file = open(file_name, "w", encoding='utf-8')
for i in range(len(self.friend_ids)):
fName_data_in = self.friends_info[i]['first_name']
lName_data_in = self.friends_info[i]['last_name']
user_name_in = f'{fName_data_in} {lName_data_in}'
file.write(f"vk.com/id{str(self.friend_ids[i])} | {str(user_name_in)}\n")
file.close()
else:
for i in range(len(self.friend_ids)):
fName_data_in = self.friends_info[i]['first_name']
lName_data_in = self.friends_info[i]['last_name']
user_name_in = f'{fName_data_in} {lName_data_in}'
self.friends_list.append(f"vk.com/id{str(self.friend_ids[i])} | {str(user_name_in)}\n")
print('\n'.join(self.friends_list))
self.friends_list.clear()
if __name__ == '__main__':
try:
getvk = GetVK().main()
except Exception:
trace = traceback.format_exc()
if 'response.json()["response"]["items"]' in trace or 'list index out of range' in trace:
print('User account is wrong to get friends list')
elif 'response.json()["response"]["object_id"]' in trace:
print('Invalid user_ID')
else:
print(trace)
Yes you have to open VK APIDoes this require an account?