Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2017 00:11:40

Tsunetomo
Зарегистрирован: 2015-04-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в цикле обработки страниц

Доброго времени суток, уважаемые форумчане, при написании парсера (код ниже) застрял на ошибке - цикл обработки страниц обрабатывает только одну страницу и выводит информацию столько раз, сколько получено страниц при пагинге вместо того чтобы обработать все страницы. Застрял…подскажите пожалуйста где я ошибся:

 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()

Офлайн

#2 Май 28, 2017 05:59:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Ошибка в цикле обработки страниц

Tsunetomo
 for page in range (1, page_count):
range() неправильно используешь.

  
>>> list(range(1, 3))
[1, 2]
>>>



Офлайн

#3 Май 28, 2017 18:29:28

Tsunetomo
Зарегистрирован: 2015-04-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в цикле обработки страниц

py.user.next
А что именно не верно? Bроде бы с range() все норм (от 1 до 7)…?

Офлайн

#4 Май 31, 2017 22:43:12

Tsunetomo
Зарегистрирован: 2015-04-01
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка в цикле обработки страниц

Tsunetomo
projects.extend(parse(get_html(BASE_URL + ‘?page=%d’ % page))
разобрался, ошибка была в этой строке:
 projects.extend(parse(get_html(BASE_URL + '&page=%d' % page))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version