Как вы соединяете данные из тега «span» с «реакцией данных», используя beautifulsoup в python? - PullRequest
3 голосов
/ 08 апреля 2019

Я пытаюсь получить данные о ценах акций в реальном времени из Yahoo Finance.Эта информация содержится в теге «span» с «class» и «data-responsetid».Я не могу извлечь информацию из этого тега span.

Когда я ввожу свой код, я не получаю никакого вывода и не получаю никаких ошибок.

Я перепробовал почти вседругие ответы на этот вопрос, но ни один из них не сработал для меня.

<--HTML Code-->
<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="34">197.00</span>
#Python Script
my_url = "https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch"
u_client = u_req(my_url)

page_html = u_client.read()
u_client.close()

page_soup = soup(page_html, "html.parser")
container = page_soup.find('span', {"data-reactid":'34'})

Я хотел бы получить вывод «197.00» (цена акции в реальном времени) в качестве вывода.

Ответы [ 4 ]

0 голосов
/ 08 апреля 2019

Вы можете получить это несколькими способами.Вот один из них:

import requests
from bs4 import BeautifulSoup

res = requests.get('https://finance.yahoo.com/quote/AAPL')
soup = BeautifulSoup(res.text, 'lxml')
price = soup.select_one('#quote-market-notice').find_all_previous()[2].text
print(price)

Другой способ:

price = soup.select_one("[class*='smartphone_Mt'] span").text
print(price)
0 голосов
/ 08 апреля 2019

Учитывая, что data-реактид может измениться, я бы использовал уникальный класс для выбора.Выбор по классу также быстрее.

import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://finance.yahoo.com/quote/AAPL/')
soup = bs(r.content, 'lxml')
print(soup.select_one('.Mb\(-4px\)').text)
0 голосов
/ 08 апреля 2019

Я открыл URL в Chrome и нажал F12. Нажатие на вкладку сети выявило этот запрос со страницы: https://query1.finance.yahoo.com/v8/finance/chart/AAPL?region=US&lang=en-US&includePrePost=false&interval=2m&range=1d&corsDomain=finance.yahoo.com&.tsrc=finance

Я бы предложил изучить базовые вызовы AJAX, которые, по-видимому, представляют хорошо отформатированный результат JSON, и посмотреть на URL количество параметров, которые вы можете изменить.

0 голосов
/ 08 апреля 2019

Каким-то образом данные-реактид изменяются на 14 при чтении URL.

page_soup = soup(page_html, "html.parser")
container = page_soup.find('span', {"data-reactid":'14'})
if container:
    print(container.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...