from bs4 import BeautifulSoup from urllib.request import urlopen import bisect site = 'http://crate.io{0}' page = BeautifulSoup(urlopen(site.format('/?has_releases=on&q=django'))) table = [] while True: for result in page.find_all('div', attrs={'class':'result'}): # строка с именем пакета и количеством загрузок count = result.find('span', attrs={'class':'count'}).string # загрузки count = int(count.replace(',', '')) package_name = result.find(attrs={'class':'package-name'}).string # имя пакета couple = [count, package_name] bisect.insort_right(table, couple) # добавляю в список через сортировку li = page.find('li', attrs={'class':'next'}) # строка с ссылку на след страницу print(li['class']) if 'disabled' in li['class']: break # если найден disabled, то это последняя страница - выход page = BeautifulSoup(urlopen(site.format(li.a['href']))) # перехожу на след страницу table.reverse() # хочу видеть на первых позициях пакет с большим кол загрузок for num, i in enumerate(table): print(num, i)
Но уж больно долго выполняется парсинг. Может что-то нужно убрать, добавить? Подключить еще какие-то модули?
P.S.: как пустые строки в коде сохранить?