Форум сайта python.su
Доброго времени суток, уважаемые форумчане, при написании парсера (код ниже) застрял на ошибке - цикл обработки страниц обрабатывает только одну страницу и выводит информацию столько раз, сколько получено страниц при пагинге вместо того чтобы обработать все страницы. Застрял…подскажите пожалуйста где я ошибся:
import urllib.request from bs4 import BeautifulSoup BASE_URL = "https://bank.gov.ua/control/uk/publish/category?cat_id=55838&page=1" def get_html(url): response = urllib.request.urlopen(url) return response.read() #создаем счетчик страниц: def get_page_count(html): soup = BeautifulSoup(html,'lxml') last_link = soup.find('td', class_='nav').find_all('a')[-1:] for href in last_link: paggination = href.get('href').split('=') return int(paggination[-1]) def parse(html): soup = BeautifulSoup(html,'lxml') table = soup.find('div',class_='announces_block') projects = [] for row in table.find_all('tr')[2:]: cols = row.find_all('td') projects.append({ 'Date': cols[0].div.get_text().strip(), 'Announces': cols[0].a.get_text().strip(), }) for project in projects: return projects def main(): page_count = get_page_count(get_html(BASE_URL)) print('всего найдено страниц %d'% page_count) projects = [] #обрабатываем каждую страницу for page in range (1, page_count): print ('Парсинг %d%%'%(page/page_count*100)) projects.extend(parse(get_html(BASE_URL + '?page=%d' % page))) for project in projects: print(project) if __name__=='__main__': main()
Офлайн
Tsunetomorange() неправильно используешь.for page in range (1, page_count):
>>> list(range(1, 3)) [1, 2] >>>
Офлайн
py.user.nextА что именно не верно? Bроде бы с range() все норм (от 1 до 7)…?
Офлайн
Tsunetomoразобрался, ошибка была в этой строке:
projects.extend(parse(get_html(BASE_URL + ‘?page=%d’ % page))
projects.extend(parse(get_html(BASE_URL + '&page=%d' % page))
Офлайн