Я пытаюсь вернуть цену акций из поиска Google, но результаты BS4 - более 300 строк.

введите описание изображения здесь

Вот мой код:

import bs4, requests

exampleFile = requests.get('https://www.google.com/search?q=unip6')
exampleSoup = bs4.BeautifulSoup(exampleFile.text, features="html.parser")
elems = exampleSoup.select('div', {"class": 'IsqQVc NprOob'})
print(len(elems))
for each in elems:
    print(each.getText())
    print(each.attrs)
    print('')

Хотелось бы, чтобы итогом была только цена: '23, 85 '

1
Felipe Dourado 13 Апр 2020 в 05:20

2 ответа

В этом случае страница не загружается динамически, поэтому сведения о цели можно найти в супе. Также возможно избежать проблемы изменения имени класса (по крайней мере, пока ...), не используя селектор класса:

for s in soup.select("div"):
    if 'Latest Trade' in s.text:
        print(s.text.split('Latest Trade. ')[1].split('BRL')[0])
        break

Выход:

23.85
0
Jack Fleeting 13 Апр 2020 в 03:10

Используя финансы Yahoo, вы можете попробовать:

import pandas as pd
from datetime import datetime, timedelta

now =  datetime.now() # time now
past = int((now - timedelta(days=30)).timestamp()) # 30 days ago
now = int(now.timestamp())

ticker = "UNIP6.SA" # https://finance.yahoo.com/quote/UNIP6.SA/
interval = "1d" # "1wk" , "1mo"
df = pd.read_csv(f"https://query1.finance.yahoo.com/v7/finance/download/{ticker}?period1={past}&period2={now}&interval={interval}&events=history")
print(df.iloc[-1]['Close'])

# 23.85

демонстрация

0
Pedro Lobito 13 Апр 2020 в 03:30