错误产生
调用新浪股票的按节点(如 hs_a
)获取股票总数接口,然后转换为整型,但是返回的是字符串,导致转换失败。
报 invalid literal for int() with base 10: '"5349"'
错误。
出错代码如下:
import requests
def get_stock_count(node='hs_a'):
url = f'https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node={node}'
r = requests.get(url)
return int(r.text)
print(get_stock_count())
问题解决
显然,这是由于接口返回的是 “5349” 字符串,除了数字本身外,还有双引号,这样,我们需要从中提取数值,或去掉引号后再做转换。
以采用正则表达式提取数值为例:
import requests
import re
def extract_numbers(text):
# 使用正则表达式匹配所有数字
pattern = r'\d+'
# 在文本中查找所有匹配项
matches = re.findall(pattern, text)
return matches
def get_stock_count(node='hs_a'):
url = f'https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node={node}'
r = requests.get(url)
return extract_numbers(r.text)[0]
print(get_stock_count())
执行结果为:5349