XPath всегда возвращает пустой список - PullRequest
0 голосов
/ 23 декабря 2019

Я пытаюсь извлечь значение времени из этого сайта .

Ниже приведен код, который я использую

import requests
from lxml import html

page = requests.get('https://beta.nseindia.com/get-quotes/derivatives?symbol=NIFTY&identifier=OPTIDXNIFTY26-12-2019CE12300.00')
tree = html.fromstring(page.content)
test1 = tree.xpath('//*[@id="equity-derivative-op-timeStamp"]/text()')

print(test1)

Результат:

[]

Как получить значение метки времени на вкладке "Option Chain" на приведенной выше странице и в этом конкретном xpath?

1 Ответ

1 голос
/ 23 декабря 2019

Как говорит Ларкс в своем ответе

Эти данные заполняются через Javascript после загрузки страницы.

Но данные загружаются как XHR. В Firefox щелкните правой кнопкой мыши страницу, выберите Inspect Element, выберите Network, выберите XHR, обновите страницу, щелкните правой кнопкой мыши интересующий запрос и откройте его на новой вкладке.

Делая это, я определил, что страница https://beta.nseindia.com/api/option-chain-indices?symbol=NIFTY может представлять интерес для вас. Это файл JSON. Вы можете использовать его как любой объект JSON:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0'
}

params = (
    ('symbol', 'NIFTY'),
)

response = requests.get('https://beta.nseindia.com/api/option-chain-indices', headers=headers, params=params)
j = response.json()
print(j['records']['timestamp'])

Выходы:

23-Dec-2019 15:30:00

Вам необходимо предоставить заголовок для этого конкретного запроса, как указано выше. Чтобы определить, какие заголовки необходимы для конкретной веб-страницы в Firefox, щелкните правой кнопкой мыши страницу, выберите «Проверить элемент», выберите «Обновить сеть», щелкните правой кнопкой мыши нужный запрос, выберите Copy, затем Copy as cURL и вставьте скопированное в * 1019. *https://curl.trillworks.com, затем используйте сгенерированный код, если он работает, удаляйте заголовки по одному, пока не получите минимальный набор, который работает. В Chrome это аналогичный процесс.

...