Не удается получить конкретное значение при очистке веб-страниц

Я пытаюсь получить фактический обменный курс евро, доллара и фунта стерлингов от этот сайт, но я понятия не имею, как его получить.

Вот скриншот исходного кода страницы: Page source

Вот код, который я использую:

import requests

import urllib.request

import time

from bs4 import BeautifulSoup


url = "https://www.nbp.pl/home.aspx?f=/kursy/kursya.html"
response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")
soup.findAll("tr")

for wartosc in soup.findAll("tr"):
    print(wartosc.get("td"))

Это в таблице. Вы просмотрели некоторые из множества ответов о работе с таблицами? Например, используя pd.read_html? Кроме того, с помощью селектора CSS: .nag + table

QHarr 22.05.2019 16:58
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
1
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
url = "https://www.nbp.pl/home.aspx?f=/kursy/kursya.html"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page, "lxml")

for itemHtml in soup.select('.pad5 tr'):

    currency = ['amerykański','euro','szterling']
    if itemHtml.find('td'):
        if any (cur in itemHtml.text for cur in currency):
            print(itemHtml.text)

Результат: американский доллар 1 3,8620 долларов США

евро 1 4 3098 евро

фунт стерлингов 1 4 8906 фунтов стерлингов

Просто потяните таблицу и манипулируйте фреймом данных по мере необходимости:

import pandas as pd

url = "https://www.nbp.pl/home.aspx?f=/kursy/kursya.html"
tables = pd.read_html(url)

df = tables[43]
df['Kurs średni'] = df['Kurs średni'] / 10000

*Выход:**

print (df.to_string())
                           Nazwa waluty Kod waluty  Kurs średni
0                       bat (Tajlandia)      1 THB       0.1208
1                     dolar amerykański      1 USD       3.8620
2                    dolar australijski      1 AUD       2.6588
3                       dolar Hongkongu      1 HKD       0.4920
4                      dolar kanadyjski      1 CAD       2.8829
5                   dolar nowozelandzki      1 NZD       2.5117
6                     dolar singapurski      1 SGD       2.7999
7                                  euro      1 EUR       4.3098
8                        forint (Węgry)    100 HUF       1.3192
9                     frank szwajcarski      1 CHF       3.8209
10                       funt szterling      1 GBP       4.8906
11                     hrywna (Ukraina)      1 UAH       0.1466
12                        jen (Japonia)    100 JPY       3.4974
13                        korona czeska      1 CZK       0.1672
14                        korona duńska      1 DKK       0.5771
15                     korona islandzka    100 ISK       3.1276
16                      korona norweska      1 NOK       0.4413
17                      korona szwedzka      1 SEK       0.4004
18                     kuna (Chorwacja)      1 HRK       0.5804
19                         lej rumuński      1 RON       0.9051
20                       lew (Bułgaria)      1 BGN       2.2036
21                         lira turecka      1 TRY       0.6335
22                nowy izraelski szekel      1 ILS       1.0686
23                      peso chilijskie    100 CLP       0.5559
24                     peso filipińskie      1 PHP       0.0736
25                    peso meksykańskie      1 MXN       0.2030
26  rand (Republika Południowej Afryki)      1 ZAR       0.2684
27                      real (Brazylia)      1 BRL       0.9562
28                    ringgit (Malezja)      1 MYR       0.9226
29                       rubel rosyjski      1 RUB       0.0600
30                   rupia indonezyjska  10000 IDR       2.6589
31                       rupia indyjska    100 INR       5.5428
32              won południowokoreański    100 KRW       0.3244
33                yuan renminbi (Chiny)      1 CNY       0.5593
34                            SDR (MFW)      1 XDR       5.3180

И для фильтрации фрейма данных

import pandas as pd

url = "https://www.nbp.pl/home.aspx?f=/kursy/kursya.html"
tables = pd.read_html(url)

df = tables[43]
df['Kurs średni'] = df['Kurs średni'] / 10000


currency = ['dolar amerykański','euro','funt szterling']
df_filter = df.loc[df['Nazwa waluty'].isin(currency)]

Выход

print (df_filter)
         Nazwa waluty Kod waluty  Kurs średni
1   dolar amerykański      1 USD        3.8620
7                euro      1 EUR        4.3098
10     funt szterling      1 GBP        4.8906

Отличное решение, но нет "." точки в последнем столбце

P C PIOTRUSIO 22.05.2019 18:12

а, хорошо, из-за , он не распознает его как десятичный. довольно легко исправить это форматирование

chitown88 22.05.2019 19:09

Другие вопросы по теме