парсинг курса доллара и евро
Недавно начал изучать парсинг и наткнулся на проблему, на которую не смог найти ответа.
В общем у меня код получает только доллар, а нужно еще евро, можно ли как-то сделать, чтоб for прошел еще один раз больше предыдущего найденного значения?
import requests
from bs4 import BeautifulSoup
URL = "https://www.fontanka.ru/currency.html"
HEADERS = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0", "accept": "*/*"}
def parse_rate():
html = requests.get(URL, headers=HEADERS, params=None)
soup = BeautifulSoup(html.text, "html.parser")
if html.status_code == 200:
#items = soup.find_all("table", class_="J-af9")
items = soup.find_all("tbody", class_="J-agb")
rates = []
for i in items:
rates.append({
"str": i.find("td", class_="J-d3").get_text(),
"val": i.find("td", class_="J-agl").get_text()
})
print(rates)
else:
print("Ошибка: " + str(html.status_code))
parse_rate()
Выводит только: [{'str': 'Доллар США', 'val': '70.97'}]
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Таблички лучше парсить через Pandas, а не "вручную":
import pandas as pd
url = "https://www.fontanka.ru/currency.html"
df = pd.read_html(url)[0]
print(df.loc[df['Валюта'].isin(['usd','eur']), ['Валюта','Курс']])
Вывод:
Валюта Курс
0 usd 70.97
1 eur 82.68
Вариант с выводом на печать в нужном формате:
df.loc[df['Валюта'].isin(['usd','eur']), ['Валюта.1','Курс']].apply(lambda x: print(f'{x[0]}: {x[1]}'), axis=1);
Вывод:
Доллар США: 71.06
Евро: 82.62