С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 03.12.2018
Сообщений: 4

Циклы. Написал программу, но проблема в том, что цикл пробегает всего один раз...

22.12.2018, 08:30. Показов 4024. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Пишу небольшой парсер для сайта курсов валют. Написал программу, но проблема в том, что цикл пробегает всего один раз. Прошу помощи. Python начал изучать относительно недавно, прошу прощения за свой глупый вопрос.
В своей программе я использую библиотеки requests и BeautifulSoup.

На сайте содержится блок div class="content_list" из которого мне нужно вытянуть содержимое ul class="list_tiny", а именно короткое название валюты и значение валюты. Цикл должен пробежать 3 раза чтобы получить данные по валютам Доллары, Евро и Рубли.
Если прописать #print (moneys), видно, что программа получила все необходимые значения и проблема только в цикле.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests
from bs4 import BeautifulSoup
url = 'https://prodengi.kz/currency/'
req = requests.get(url)
soup = BeautifulSoup(req.text, 'lxml')
moneys = soup.find('div', {'class': 'content_list'}).findAll('ul', {'class', 'list_tiny'})
#print (moneys)
money_dict = {}
i = 0
for money in moneys:
    money_name = money.find('div', {'class', 'short_name befor'}).text
    money_value = money.find('div', {'class', 'price_buy befor'}).text
    money_dict[i] = [money_name, money_value]
    i += 1
print(money_dict)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2018, 08:30
Ответы с готовыми решениями:

Цикл for выполняется всего один раз
#include <iostream> #include <math.h> using namespace std; int main() { int n=100, s=0, i; for (i=1; i<n; i++...

Вложенный цикл выполняется всего один раз
есть вот такой цикл. на вход поступает массив интов из 5 элементов. по идее код должен вывести этот массив 5 раз. но вложенный цикл не...

Почему цикл while работает всего один раз
Всем привет. С работы выгнали на учебу. И вот 1я моя сессия , помогите пожалуйста! Есть задание, не могу понять почему цикл работает...

3
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,294
22.12.2018, 13:04
Python
1
moneys = soup.find('div', {'class': 'content_list'}).findAll('ul', {'class', 'list_tiny'})
посмотрите что у вас в moneys. цикл итерирует по этому объекту и если только один раз значить там один элемент.
Python
1
2
3
4
5
6
7
>>> moneys = ['ob']
>>> for money in moneys:
    print(money)
 
    
ob
>>>
и
Python
1
2
3
4
5
6
7
8
9
10
>>> moneys = ['ob','ob1','ob2','ob3']
>>> for money in moneys:
    print(money)
 
    
ob
ob1
ob2
ob3
>>>
1
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
22.12.2018, 13:30
Лучший ответ Сообщение было отмечено Cizinec_CZ как решение

Решение

Цитата Сообщение от Cizinec_CZ Посмотреть сообщение
Если прописать #print (moneys), видно, что программа получила все необходимые значения и проблема только в цикле.
Потому что ты получаешь тег "ul" через findAll и в итоге у тебя в списке получается 1 элемент. Тебе надо из этого тега "ul" получить все значения "li", в общем должно быть так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import requests
from bs4 import BeautifulSoup
 
html = requests.get("https://prodengi.kz/currency/").text
bs4 = BeautifulSoup(html, "html.parser")
 
curr = bs4.find("ul", class_="list_tiny").find_all("li")
 
for val in curr:
    price_buy = val.find("div", class_="price_buy befor").find("p").text
    name = val.find("div", class_="short_name befor").find("p").text
    print("1 {0} стоит {1} тенге".format(name, price_buy))
И установи последнюю версию BeautifulSoup, а то я смотрю у тебя старый синтаксис
1
0 / 0 / 0
Регистрация: 03.12.2018
Сообщений: 4
22.12.2018, 19:21  [ТС]
Цитата Сообщение от Resistanse Посмотреть сообщение
Потому что ты получаешь тег "ul" через findAll и в итоге у тебя в списке получается 1 элемент. Тебе надо из этого тега "ul" получить все значения "li", в общем должно быть так:
Спасибо! и еще небольшой вопрос, как экспортировать данные в csv файл?

Добавлено через 20 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests
from bs4 import BeautifulSoup
import csv
 
csv_columns = ['Name', 'Price']
html = requests.get("https://prodengi.kz/currency/").text
bs4 = BeautifulSoup(html, "html.parser")
money_dict = {} 
curr = bs4.find("ul", class_="list_tiny").find_all("li")
csv_file = "data.csv"
i=0
 
for val in curr:
    price_buy = val.find("div", class_="price_buy befor").find("p").text
    name = val.find("div", class_="short_name befor").find("p").text
    money_dict[i] = {'Name':name,'Price': price_buy}
    i += 1  
 
try:
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        for data in money_dict:
            writer.writerow(data)
except IOError:
    print("I/O error")
При попытке экспортировать в csv, выходит ошибка
TypeError: 'int' object is not iterable
Добавлено через 8 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
from bs4 import BeautifulSoup
import csv
 
csv_columns = ['Name', 'Price']
html = requests.get("https://prodengi.kz/currency/").text
bs4 = BeautifulSoup(html, "html.parser")
money_dict = {} 
curr = bs4.find("ul", class_="list_tiny").find_all("li")
csv_file = "data.csv"
i=0
 
for val in curr:
    price_buy = val.find("div", class_="price_buy befor").find("p").text
    name = val.find("div", class_="short_name befor").find("p").text
    money_dict[i] = {'Name':name,'Price': price_buy}
    i += 1  
j = 0
try:
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        for data in money_dict:
            writer.writerow(money_dict[j])
            j +=1
except IOError:
    print("I/O error")
Получилось, все работает! Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2018, 19:21
Помогаю со студенческими работами здесь

Проходит вложенный цикл for всего один раз
Здравствуйте. Что-то немного запарился с вложенными циклами, как сделать их правильно? Есть 3 List и переменная ...

Проблема состоит в том, что по сайту можно сделать всего 10 переходов со страницы на страницу
У меня есть сайт, который работает вроде бы нормально. Но проблема состоит в том, что по сайту можно сделать всего 10 переходов со страницы...

Написал программу, которая будет удалять повторяющиеся символы из строки, но дело в том что пробелы она тоже удаляет
Как реализовать её , чтобы пробелы оставались на месте? P.s. turbo prolog Domains list=char* Predicates ...

Написал программу, но она что-то не совсем то, выдает, не могу понять в чем проблема
При х=3, y= -6 после выполнения фрагмента алгоритма 1. если y<x, то y=y+x 2.если y<0, то y=-y 3. если x<0, то a=x*2 иначе...

Поправить программу, чтобы при выводе информация о каждом слове встречалась всего один раз
помогите пожалуйста,буду очень благодарен! есть программа: program main implicit none character(100) ::...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru