Найти - Пользователи
Полная версия: загрузка страниц с vk.com
Начало » Python для новичков » загрузка страниц с vk.com
1
S1asH
народ помогите.
хочу собрать адреса всех страниц с vk со страницы поиска людей все не могу додумать как сделать так чтоб сначала вытаскивал первые 30 пользователей а потом на шел по ссылке и загружал остальные 30 и так пока не загрузит всех пользователей.
alexsis
Для этих целей, вроде как подходит vk api. Есть библиотека для python vkontakte, для запросов к api.
https://vk.com/pages?oid=-1&p=users.search
S1asH
хотелось бы все сделать без использования API.
думаю надо все это реализовать через цикл, но все не могу додумать как. т.е скрипт должен сначала первых 30 пользователей по ссылке (https://vk.com/search?c%5Bage_from%5D=18&c%5Bcity%5D=1&c%5Bcountry%5D=1&c%5Bname%5D=1&c%5Bphoto%5D=1&c%5Bsection%5D=people) потом по ссылке взятой из more и так пока пользователи не закончатся(не будит значения в more)

вот часть что написал
import mechanize
from BeautifulSoup import BeautifulSoup
import re
import time,datetime
br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_robots(False)
br.open('https://vk.com/')
br.select_form(nr=0)
br.form['email'] = 'username'
br.form['pass'] = 'passwd'
br.submit()
br.open('https://vk.com/search?c%5Bage_from%5D=18&c%5Bcity%5D=1&c%5Bcountry%5D=1&c%5Bname%5D=1&c%5Bphoto%5D=1&c%5Bsection%5D=people')
doc=br.response().read()
soup=BeautifulSoup(''.join(doc))
#url = 'https://vk.com/' + soup.findAll(attrs={"class":"simple_fit_item search_item"})[0]['href']#ссылки на страницы
#more = 'https://vk.com/' + soup.findAll(attrs={"class": "show_more"})[0]['href']#ссылка на загрузку еще пользователей
"""тут должен быть код позволяющий загрузить пользователей из vk"""

alexsis
Почему вы избегаете использования api? Это будет намного удобней чем парсинг html.
S1asH
в Api есть ограничение на количество результатов в 1000. и вопрос как мне обрабатывать параметр offset после 1000 результатов
alexsis
S1asH
в Api есть ограничение на количество результатов в 1000. и вопрос как мне обрабатывать параметр offset после 1000 результатов

Для каждого запроса просто нужно увеличивать смещение.
wiygn
Вам сюда
https://vk.com/dev/users.search

Алгоритм несложный:
Из ответа на запрос апи берем
response.json()['response']['count']
— число
Над этим числом проводим нехитрую манипуляцию
number_of_cycles = round(count / 1000 + 0.5)
Тут мы делим на тысячу (ведь в ответе не может быть больше тысячи айтемов) и прибавляем .5 для постоянного округления вверх, чтобы, например, в случае 40331го результа начинался новый цикл, а завершался после парсинга сорока тысяч.

Потом задаем offset и начинаем нужный цикл

offset = 0
for i in range(number_of_cycles):
	# Каждый цикл возвращает нам 1000 идентификаторов и мы сохраняем их во временный список items для обхода
	r = requests.get(url=VK_API_URL, params={'offset': offset, 'count': 1000, 'v': '5.14'})
	items = r.json()['response']['items']
	# Проходимся по этому списку и делаем все что нам нужно
	for item in items:
		doTheMagic(item)
	# Задаем смещение для следующей тысячи
	offset += 1000

Конкретно в вашем случае даже с отдельными элементами ничего делать не нужно, а просто мерджить два списка.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB