Python BeautifulSoup найти с данными-реактив - PullRequest
0 голосов
/ 18 ноября 2018

Я пытался отсканировать некоторые цены на акции от Yahoo Finance, но вместо того, чтобы получить желаемый результат, 229.30, я получил "Почту".Кто-нибудь знает почему?

from bs4 import BeautifulSoup
import requests
import sys
from datetime import datetime, timedelta
import pandas as pd

code = input("Enter the NYSE stock symbol: ")

#Your Choice Stock
source = requests.get('https://finance.yahoo.com/quote/'+ code +'/history p='+ code).text
soup = BeautifulSoup(source, 'lxml')
price = soup.find('span', attrs={"data-reactid": "55"}
print(code + " stock: " + price.text)

Кроме того, игнорируйте все другие операции импорта, они являются частью моего файла большего размера.

РЕДАКТИРОВАТЬ : Теперь это по крайней мере дает мненомер, но этот номер не тот, который я ищу.Это дает мне 231,12, а не 229,30.Кроме того, акции, которые я получаю, принадлежат Costco.(COST - это биржевой символ NYSE)

ДРУГОЕ РЕДАКТИРОВАНИЕ : по какой-то причине он считывал 57 как реакцию на данные, а не 55. Я попытался использовать 53, и он дал мнезначение 55. Почему впереди 2 реактивы данных?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

data-reactid является динамическим для последней цены, легче получить данные из столбца истории таблицы дат 5 close*

price = soup.select('table td')
print(code + " stock: " + price[4].text)

если вы просматриваете источник страницы, есть интересные данные в формате Json

root.App.main = {..}

после разбора выберите его

price = jsonData["context"]["dispatcher"]["stores"]["QuoteSummaryStore"]["price"]["regularMarketPrice"]["raw"]
0 голосов
/ 19 ноября 2018

я пытаюсь получить доступ к URL, который показан в коде, затем я был перенаправлен на https://finance.yahoo.com/lookup?s=COSTCO.Я проверил элемент внутри таблицы и обнаружил, что ваш тег неверен.Измените span на td, все будет хорошо

from bs4 import BeautifulSoup
import requests
import sys
from datetime import datetime, timedelta
import pandas as pd

code = "Costco" #input("Enter the NYSE stock symbol: ")

#Your Choice Stock
url = "https://finance.yahoo.com/lookup?s={}".format(code)
print(url)
source = requests.get(url).text
soup = BeautifulSoup(source, 'lxml')
symbol = soup.find('td', attrs={"data-reactid": "57"}) # 57+8*n
name = soup.find('td', attrs={"data-reactid": "58"}) # 58+8*n
price = soup.find('td', attrs={"data-reactid": "59"}) # 59+8*n
print(code + " stock: " + price.text)

print(pd.read_html(url))

Вывод:

https://finance.yahoo.com/lookup?s=Costco
Costco stock: 231.02
[       Symbol                             Name   ...       Type Exchange
0        COST     Costco Wholesale Corporation   ...     Stocks      NMS
1     COST.MX            COSTCO WHOLESALE CORP   ...     Stocks      MEX
2      CTO.DU         COSTCO WHOLESALE DL-,005   ...     Stocks      DUS
3      CTO.SG  COSTCO WHOLESALE CORP. Register   ...     Stocks      STU
4      CTO.MU         COSTCO WHOLESALE DL-,005   ...     Stocks      MUN
5     COST.VI            COSTCO WHOLESALE CORP   ...     Stocks      VIE
6      CTO.HM         COSTCO WHOLESALE DL-,005   ...     Stocks      HAM
7      CTO.BE         COSTCO WHOLESALE DL-,005   ...     Stocks      BER
8       CTO.F         COSTCO WHOLESALE DL-,005   ...     Stocks      FRA
9      0I47.L  COSTCO WHOLESALE CORP COSTCO WH   ...     Stocks      LSE
10  COWC34.SA                 COSTCO WHOLESALE   ...     Stocks      SAO

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