Python: xpath для извлечения даты - PullRequest
0 голосов
/ 09 апреля 2020

Я хотел бы извлечь дату 31-Dec-19, но не смог этого сделать

IC = requests.get('https://www.reuters.com/companies/IMAX.P/financials/income-statement-annual')
IC = html.fromstring(IC.content)
columns = IC.xpath('//th/span/text()')
>>['Revenue', 'Total Revenue', 'Cost of Revenue, Total', 'Gross Profit', 'Selling/General/Admin. Expenses, Total', 'Research & Development', 'Unusual Expense (Income)'
, 'Total Operating Expense', 'Operating Income', 'Interest Inc.(Exp.),Net-Non-Op., Total', 'Other, Net', 'Net Income Before Taxes', 'Provision for Income Taxes', 'Ne
t Income After Taxes', 'Net Income Before Extra. Items', 'Total Extraordinary Items', 'Net Income', 'Income Available to Com Excl ExtraOrd', 'Income Available to Com
 Incl ExtraOrd', 'Diluted Net Income', 'Diluted Weighted Average Shares', 'Diluted EPS Excluding ExtraOrd Items', 'DPS - Common Stock Primary Issue', 'Diluted Normal
ized EPS', 'Interest Exp.(Inc.),Net-Operating, Total', 'Dilution Adjustment', 'Depreciation/Amortization']

Пожалуйста, посоветуйте, как использовать XPath для извлечения даты?

Ответы [ 2 ]

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

Вы можете просто использовать запросы и получать данные как JSON (python словарь). Если вы посмотрите на сеть, веб-сайт вызывает API для получения своих данных. Вот как я бы это сделал:

import requests
httpx = requests.Session()

# URLS
URL_Financials = 'https://www.reuters.com/companies/api/getFetchCompanyFinancials/IMAX.P'


response = httpx.get(URL_Financials)

data = response.json()

print(data)

Данные теперь являются словарем, и вы можете получить свои значения так же, как и любой python словарь.

См. Также эти URL:

URL_QUOTE = 'https://www.reuters.com/companies/api/getFetchCompanyQuote/IMAX.P'
URL_OUOTES = 'https://www.reuters.com/companies/api/getFetchQuotes/.DJI,.SPX,.IXIC,.GSPTSE,.FTSE,.GDAXI,.FCHI,.TRXFLDEXPU,.N225,.HSI,.BSESN,.NSEI,.SSEC,.XU100,.JALSH,.TRXFLDAFPU,.TRXFLDZAP'

Преобразование данных о доходах в Pandas

# ...

from functools import reduce
import pandas as pd

X = data['market_data']['financial_statements']['income']['annual']

dfs = [pd.DataFrame(X[column]).rename(columns={'value':column}) for column in X.keys() if len(X[column])==6]

df = reduce(lambda x, y: pd.merge(x, y, on ='date'), dfs)

print(df)

enter image description here

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

Ну, в исходном коде страницы. У него нет даты. Так что вы не можете получить дату напрямую. (Может быть, вы могли бы найти API и сканировать его, но я не нашел его. ) enter image description here

Таким образом, использование селена (вы также можете использовать xpath в селене) может быть простым способом:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url="https://www.reuters.com/companies/IMAX.P/financials/income-statement-annual")
date = driver.find_element_by_xpath("/html/body/div/div/div[4]/div[1]/div/div/section/div[2]/div[3]/table/thead/tr/th[2]/time").text
date
> 31-Dec-19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...