数据框中股票列表的网络抓取 vwap 值

web-scraping vwap value for list of stock in data frame

从 nse 网站抓取特定值 (vwap): 这里我有一个带有股票列表的数据框,我需要从 nse 网站获取每只股票的 vwap 值。 下面是重现代码。

    stock_list = ['SKIPPER','NIPPOBATRY','RANEHOLDIN','OSWALAGRO','GINNIFILA','VOLTAMP','NACLIND','GALLANTT','ASAHISONG','KSL','UNICHEMLAB',
'TRENT','TIL','MMP','SHARDAMOTR','ARCHIES','MAGADSUGAR']
df = pd.DataFrame()
df['stock_list'] = stock_list
df['vwap_value'] = 0

如何再次抓取数据框中指定的股票名称的vwap值

https://www1.nseindia.com/index_nse.htm

so 在上面的 url 中,一旦此 url 被调用,第一个 stock_list 中的 SKIPPER 将被输入到 EQUITY 搜索框中,新的 url 页面被导航

https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=SKIPPER&illiquid=0&smeFlag=0&itpFlag=0 然后从新的 link.

获取 vwap 值

您可以替换 URL 中的股票名称以获得每个股票的 HTML 页:

https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=<stock_name>&illiquid=0&smeFlag=0&itpFlag=0

对于每个页面,您可以通过以下代码获取 vwap 值:

vwap = response.xpath("//span[@id='vwap']).xpath("string()").extract()

数据以 Json 格式嵌入页面,因此 BeautifulSoup 看不到它。您可以使用 json 模块加载它。

例如:

import json
import requests
from bs4 import BeautifulSoup


url = 'https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=SKIPPER&illiquid=0&smeFlag=0&itpFlag=0'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0'}

soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
data = json.loads(soup.select_one('#responseDiv').text)

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

print('averagePrice:', data['data'][0]['averagePrice'])

打印:

averagePrice: 45.52