Очистка div внутри двух div с использованием красивого супа ничего не возвращает - PullRequest
1 голос
/ 09 июля 2020

Итак, в основном я пытаюсь очистить значение div class = "stx-field-value" внутри div id = "Open", которое находится внутри основного div class = "stx-tooltip", но код, который я написал, не дает вывода. Это тоже не дает никаких ошибок. Что я делаю не так?

Следующие ссылки на Yahoo

Следующие ссылки на изображение сайта, который я пытаюсь очистить

import bs4
import requests
from bs4 import BeautifulSoup


def ParsePrice():
    total_calls_a_day= 1
    while total_calls_a_day<3:
        total_calls_a_day+=1
        # time.sleep(60)
         
        
        company = 'https://in.finance.yahoo.com/quote/HDFC.NS/chart?p=HDFC.NS'
        r=requests.get(company)
        soup=bs4.BeautifulSoup(r.text,"lxml")

        for foo in soup.find_all('div', attrs={'class': 'stx-tooltip'}):

            bar = foo.find('div', attrs={'id': 'Open'})
            for check in bar:
                close = check.find('div', attrs={'class': 'stx-field-value'}).text
            
                print(close)


if __name__ == '__main__':
    ParsePrice()

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Данные, которые вы видите в браузере, загружаются через JavaScript. Вы можете использовать Yahoo API для загрузки данных в формате Json.

Например:

import json
import requests


url = 'https://query1.finance.yahoo.com/v8/finance/chart/HDFCBANK.NS?symbol=HDFCBANK.NS&period1=1569362400&period2=1594296314&interval=1d&includePrePost=true&events=div|split|earn&lang=en-IN&region=IN'
data = requests.get(url).json()

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

print('{:>10} {:>10}'.format('Open', 'Close'))
for o, c in zip(data['chart']['result'][0]['indicators']['quote'][0]['open'],
                data['chart']['result'][0]['indicators']['quote'][0]['close']):
    print('{:>10.3f} {:>10.3f}'.format(float('nan') if o is None else o, float('nan') if c is None else c))

Печать:

      Open      Close
  1249.900   1239.700
  1239.800   1242.500
  1248.250   1244.200
  1228.800   1227.450
  1231.500   1248.800
  1239.950   1223.550
  1236.650   1189.700
  1201.200   1186.900
  1197.100   1228.150
  1221.800   1200.550
  1213.400   1198.800
  1209.000   1204.400
  1207.000   1223.050
  1231.650   1221.100
  1227.500   1220.000
  1225.450   1229.000
  1257.000   1239.300
  1246.850   1241.600
  1248.000   1236.100
  1240.000   1229.000
       nan        nan
  1238.000   1242.500
  1246.900   1248.350

... and so on.
0 голосов
/ 09 июля 2020

EDIT: ответ Андрея Кесели намного лучше


На веб-сайте нет класса stx-tooltip, определенного в html. Скорее всего, он добавлен через js. Beautiful Soup анализирует только HTML, поэтому работать не будет. Для этого вы можете попробовать селен в безголовом режиме.
...