почему красивый суп не находит ценности, когда он существует - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь очистить данные о финансах Yahoo с красивым супом.Одно поле представляет собой тег span с атрибутом «data-activtid» = «42», представляющим предыдущее закрытое значение акции.Если я запускаю следующие команды, он возвращает None.Почему это так?

код ниже:

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = 'http://finance.yahoo.com/q/op?s=spy+Options'
page = urlopen(url)
soup = BeautifulSoup(page)
soup.find("span", attrs={"data-reactid":"42"})

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Когда вы открываете браузер и указываете на http://finance.yahoo.com/q/op?s=spy+Options, несколько вызовов XHR отправляются браузером.Один из этих вызовов возвращает структуру данных с полем 'previousClose'.Это могут быть поля, которые вы ищете.См. Код ниже.

import requests
import pprint

r = requests.get('https://query1.finance.yahoo.com/v7/finance/spark?symbols=%5EGSPC&range=1d&interval=5m&indicators=close&includeTimestamps=false&includePrePost=false&corsDomain=finance.yahoo.com&.tsrc=finance')
if r.status_code == 200:
    pprint.pprint(r.json())

выход

{'spark': {'error': None,
           'result': [{'response': [{'indicators': {'quote': [{'close': [2982.4,
                                                                         2981.64,
                                                                         2982.96,
                                                                         2982.85,
                                                                         2978.84,
                                                                         2977.04,
                                                                         2974.02,
                                                                         2974.34,
                                                                         2973.85,
                                                                         2974.75,
                                                                         2975.68,
                                                                         2978.29,
                                                                         2977.26,
                                                                         2978.91,
                                                                         2980.48,
                                                                         2983.23,
                                                                         2982.07,
                                                                         2984.48,
                                                                         2984.14,
                                                                         2984.07,
                                                                         2984.66,
                                                                         2981.88,
                                                                         2983.19,
                                                                         2983.86,
                                                                         2983.79,
                                                                         2967.47,
                                                                         2968.61,
                                                                         2971.59,
                                                                         2970.77,
                                                                         2975.5,
                                                                         2971.69,
                                                                         2972.09,
                                                                         2973.98,
                                                                         2968.89,
                                                                         2969.1,
                                                                         2970.09,
                                                                         2968.25,
                                                                         2969.2,
                                                                         2966.84,
                                                                         2963.03,
                                                                         2962.99,
                                                                         2958.07,
                                                                         2959.89,
                                                                         2963.97,
                                                                         2962.86,
                                                                         2960.46,
                                                                         2958.78,
                                                                         2961.0,
                                                                         2959.69,
                                                                         2959.73,
                                                                         2961.58,
                                                                         2958.23,
                                                                         2959.21,
                                                                         2960.67,
                                                                         2958.38,
                                                                         2955.76,
                                                                         2956.29,
                                                                         2955.62,
                                                                         2954.33,
                                                                         2954.44,
                                                                         2952.78,
                                                                         2951.81,
                                                                         2951.3,
                                                                         2948.71,
                                                                         2946.59,
                                                                         2948.26,
                                                                         2950.32,
                                                                         2948.2,
                                                                         2948.35,
                                                                         2953.54,
                                                                         2955.45,
                                                                         2952.13,
                                                                         2955.97,
                                                                         2956.97,
                                                                         2957.38,
                                                                         2958.28,
                                                                         2961.44,
                                                                         2962.13]}]},
                                     'meta': {'chartPreviousClose': 2977.62,
                                              'currency': 'USD',
                                              'currentTradingPeriod': {'post': {'end': 1569628800,
                                                                                'gmtoffset': -14400,
                                                                                'start': 1569614400,
                                                                                'timezone': 'EDT'},
                                                                       'pre': {'end': 1569591000,
                                                                               'gmtoffset': -14400,
                                                                               'start': 1569571200,
                                                                               'timezone': 'EDT'},
                                                                       'regular': {'end': 1569614400,
                                                                                   'gmtoffset': -14400,
                                                                                   'start': 1569591000,
                                                                                   'timezone': 'EDT'}},
                                              'dataGranularity': '5m',
                                              'exchangeName': 'SNP',
                                              'exchangeTimezoneName': 'America/New_York',
                                              'firstTradeDate': -1325602800,
                                              'gmtoffset': -14400,
                                              'instrumentType': 'INDEX',
                                              'previousClose': 2977.62,
                                              'priceHint': 2,
                                              'range': '1d',
                                              'regularMarketPrice': 2961.79,
                                              'regularMarketTime': 1569618019,
                                              'scale': 3,
                                              'symbol': '^GSPC',
                                              'timezone': 'EDT',
                                              'tradingPeriods': [[{'end': 1569614400,
                                                                   'gmtoffset': -14400,
                                                                   'start': 1569591000,
                                                                   'timezone': 'EDT'}]],
                                              'validRanges': ['1d',
                                                              '5d',
                                                              '1mo',
                                                              '3mo',
                                                              '6mo',
                                                              '1y',
                                                              '2y',
                                                              '5y',
                                                              '10y',
                                                              'ytd',
                                                              'max']},
                                     'timestamp': [1569591000,
                                                   1569591300,
                                                   1569591600,
                                                   1569591900,
                                                   1569592200,
                                                   1569592500,
                                                   1569592800,
                                                   1569593100,
                                                   1569593400,
                                                   1569593700,
                                                   1569594000,
                                                   1569594300,
                                                   1569594600,
                                                   1569594900,
                                                   1569595200,
                                                   1569595500,
                                                   1569595800,
                                                   1569596100,
                                                   1569596400,
                                                   1569596700,
                                                   1569597000,
                                                   1569597300,
                                                   1569597600,
                                                   1569597900,
                                                   1569598200,
                                                   1569598500,
                                                   1569598800,
                                                   1569599100,
                                                   1569599400,
                                                   1569599700,
                                                   1569600000,
                                                   1569600300,
                                                   1569600600,
                                                   1569600900,
                                                   1569601200,
                                                   1569601500,
                                                   1569601800,
                                                   1569602100,
                                                   1569602400,
                                                   1569602700,
                                                   1569603000,
                                                   1569603300,
                                                   1569603600,
                                                   1569603900,
                                                   1569604200,
                                                   1569604500,
                                                   1569604800,
                                                   1569605100,
                                                   1569605400,
                                                   1569605700,
                                                   1569606000,
                                                   1569606300,
                                                   1569606600,
                                                   1569606900,
                                                   1569607200,
                                                   1569607500,
                                                   1569607800,
                                                   1569608100,
                                                   1569608400,
                                                   1569608700,
                                                   1569609000,
                                                   1569609300,
                                                   1569609600,
                                                   1569609900,
                                                   1569610200,
                                                   1569610500,
                                                   1569610800,
                                                   1569611100,
                                                   1569611400,
                                                   1569611700,
                                                   1569612000,
                                                   1569612300,
                                                   1569612600,
                                                   1569612900,
                                                   1569613200,
                                                   1569613500,
                                                   1569613800,
                                                   1569614100]}],
                       'symbol': '^GSPC'}]}}
0 голосов
/ 25 сентября 2019

Попробуйте:

soup.find_all("span", attrs={"data-reactid":"42"})

См. attrs для дополнительных примеров.

РЕДАКТИРОВАТЬ:

Поскольку страница отображается с помощью ReactJS , данные, к которым вы пытаетесь получить доступ, недоступны при выполнении запроса, поэтому вы всегда получаете None

Я предлагаюВы должны использовать что-то вроде yfinance .

См. this для получения дополнительной информации.

...