无法抓取 NSE 中的表格数据

Sid*_*Ram 1 python data-analysis web-scraping

我正在尝试从 NSE 网站抓取 Advances/Declines - 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我只能得到一个空值或无。我不确定我做错了什么。当我检查网站中的元素时,我看到数值 978、904,但在 Spyder 中,这些元素中的值显示有连字符。有人可以帮忙吗?

在此输入图像描述

fur*_*ras 5

该页面用于JavaScript加载这些信息但requests/BeautifulSoup无法运行JavaScript

使用DevToolsin Chrome/ Firefox(tab Network, filter 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'])
Run Code Online (Sandbox Code Playgroud)

顺便说一句:如果没有,它不会发送数据User-Agent