繁体   English   中英

Python,请求网络抓取 - NSE India 提供空列表

[英]Python, requests webscraping - NSE India gives emtpy list

我正在尝试使用从 NSE 中抓取数据的请求来寻找印度股市的涨幅最大的股票。 我在 yahoo Finance 上使用了同样的方法并且它有效,但在这里,我一直得到空列表作为结果。

这是我的代码:

import requests
from lxml import html
import urllib3


urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


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

resp = requests.get('https://www.nseindia.com/market-data/top-gainers-loosers',  verify=False, headers=headers)
tree = html.fromstring(resp.content)

count = 1
stocks = []
for i in range(30):
    name = tree.xpath('//*[@id="topgainer-Table"]/tbody/tr['+str(count)+']/td[1]/a')
    print(name)
    try:
        stocks.append(name[0].text)
    except:
        pass
    #name.text  
    count +=1
    
print(stocks)

作为 output 我得到 [ ] 打印了很多次(一个空列表)。 我认为问题出在 NSE 上,因为它有许多不同的表,它们都具有相同的 xpath。

有任何想法吗?

如果您检查网站,加载数据需要一些时间,因此您将无法从bs4找到数据。

网络标签::

在此处输入图像描述

您可以从“网络”选项卡中找到它并搜索您可以从所附屏幕截图中获得的任何公司名称,然后找到 URL 并调用它,它将返回JSON数据。 所以你可以提取你想要的数据

import requests
import pandas  as pd
headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"}
res=requests.get(r"https://www.nseindia.com/api/live-analysis-variations?index=gainers",headers=headers)
all_data=res.json()['NIFTY']['data']
df=pd.DataFrame(all_data)

Output: 在此处输入图像描述

URL 用于顶部松散者:: https://www.nseindia.com/api/live-analysis-variations?index=loosers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM