Невозможно очистить табличные данные в NSE - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь отсканировать авансы / отклонения с веб-сайта NSE - https://www1.nseindia.com/live_market/dynaContent/live_market.htm

Авансы / отклонения представлены в табличном формате в HTML. Но я не могу получить фактическое числовое значение, которое отображается на сайте.

from bs4 import BeautifulSoup
import pandas as pd
import requests

url = "https://www1.nseindia.com/live_market/dynaContent/live_market.htm"
webpage = requests.get(url);
soup = BeautifulSoup(webpage.content, "html.parser");
for tr in soup.find_all('tr'):
  advance = tr.find_all('td')
  print(advance)

enter image description here

Я могу получить только пустое значение или NONE. Я не уверен, что я делаю неправильно. Когда я проверяю элемент на веб-сайте, я вижу числовые значения 978, 904, но в Spyder значения в этих элементах отображаются с дефисом. Может кто-нибудь помочь, пожалуйста?

enter image description here

1 Ответ

1 голос
/ 10 января 2020

Эта страница использует JavaScript для загрузки этой информации, но requests / BeautifulSoup не может работать JavaScript.

Использование DevTools в Chrome / Firefox (вкладка Network, фильтр xhr) Я нашел URL, используемый JavaScript для загрузки в качестве JSON данных, поэтому мне даже не нужно использовать BeautifulSoup для его получения.

import requests

url = 'https://www1.nseindia.com/live_market/dynaContent/live_analysis/changePercentage.json'
r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
data = r.json()
print(data['rows'][0]['advances'])
print(data['rows'][0]['declines'])
print(data['rows'][0]['unchanged'])
print(data['rows'][0]['total'])

Кстати: Он не отправляет данные без User-Agent

...