Webscraping Live данные - PullRequest
       5

Webscraping Live данные

0 голосов
/ 20 апреля 2020

В настоящее время я пытаюсь получить данные о фондовом рынке в реальном времени со страницы финансов Yahoo.

Я использую BS4. Моя текущая проблема заключается в том, что всякий раз, когда я запускаю свой скрипт, он не обновляется должным образом, чтобы отражать текущую цену акции.

Если у кого-нибудь есть какие-либо советы о том, как это изменить, это будет оценено.

import requests
from bs4 import BeautifulSoup

while True:
    page = requests.get("https://nz.finance.yahoo.com/quote/NZDUSD=X?p=NZDUSD=X")
    soup = BeautifulSoup(page.text, "html.parser")
    price = soup.find("div", {"class": "My(6px) Pos(r) smartphone_Mt(6px)"}).find("span").text
    print(price)

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Другое решение включает использование этого пакета: yahooquery . Нет необходимости в просмотре веб-страниц.

from yahooquery import Ticker

t = Ticker('aapl')
ls = []

# You'll want to break out when the market is closed
while True:
    data = t.price  # Dictionary containing lots of data
    # print current price and timestamp
    print(data['regularMarketPrice'], data['regularMarketTime'])
    time.sleep(5)

Вы также можете получить данные текущего дня по минутам с помощью следующего:

from datetime import datetime

t = Ticker('aapl')
t.history(interval='1m', start=datetime.today().date())
0 голосов
/ 20 апреля 2020

НЕ ВОЗМОЖНО С BS4 ALONE

Этот веб-сайт особенно использует JavaScript для обновления страницы и urlib et c. просто анализирует html содержимое страницы, а не Java Script или AJAX содержимое. Phantom Js или Selenium Web Browser предоставляют более механизированный браузер, который часто может запускать коды JavaScript, позволяющие динамически c веб-сайтам. Попробуйте использовать это:)

Использование Selenium Это можно сделать следующим образом:

    from selenium import webdriver   #its the library
        import time
        from selenium.webdriver.common.keys import Keys
        from bs4 import BeautifulSoup as soup

            #it Says that we are going to Use chrome browser
        chrome_options = webdriver.ChromeOptions()
            #hiding the Chrome Browser
        chrome_options.add_argument("--headless")

    #Initiating Chrome with all properties we need (in this case we use no specific properties
        driver = webdriver.Chrome(chrome_options=chrome_options,executable_path='C:/Users/shary/Downloads/chromedriver.exe')
    #URL We need to open
        url = 'https://nz.finance.yahoo.com/quote/NZDUSD=X?p=NZDUSD=X'

    #Starting Our Browser
        driver = webdriver.Chrome()
    #Accessing the url .. this will open the page just as you open in Chrome etc.
        driver.get(url)

        while 1:
    #it will get you the html content repeatedly .. So you can get the changing price
            html = driver.page_source
            page_soup = soup(html,features="lxml")
            price = page_soup.find("div", {"class": "D(ib) Mend(20px)"}).text
            print(price)
            time.sleep(5)

Обратите внимание на лучшие комментарии, но надеюсь, что вы поймете это :) Иначе Посмотрите учебник на YouTube, чтобы получить правильное представление что делает бот Selenium

enter image description here

Надеюсь, что это поможет. Это работает идеально для меня :) Примите этот ответ, если он поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...