BeautifulSoup4从预样式中提取并选择数据



我想从这个链接中提取所有的short_name我已经试着遵循这个答案了,但失败了。得到的结果是'None'

这是我的代码:

def checkStockIdExistOrNot(stockIdNumberOrName):
BursaStockSearchIdURL = 'https://www.bursamalaysia.com/api/v1/search/stock_list?keyword=' + str(stockIdNumberOrName) + '&lang=EN&limit=99'
BursaStockSearchIdRequest = requests.get(str(BursaStockSearchIdURL), headers=header)
BursaStockSearchIdParser = BeautifulSoup(BursaStockSearchIdRequest.content, 'html.parser')
BursaSelection = BursaStockSearchIdParser.find('pre')
print(BursaSelection)
checkStockIdExistOrNot('SERBADK')

我的意图是只得到short_nameSERBADK和SERBADK-C17。但是,由于'None'的值,我无法从中选择/挑选任何单个数据。

谢谢!

As请求以json格式返回数据,因此您可以使用直接的.json方法从中提取数据!

import requests
res=requests.get("https://www.bursamalaysia.com/api/v1/search/stock_list?keyword=SERBADK&lang=EN&limit=99")
main_data=res.json()['data']
for i in range(len(main_data)):
print(main_data[i]['short_name'])

输出:

SERBADK
SERBADK-C16
SERBADK-C17
SERBADK-C20
SERBADK-C21
SERBADK-C22
SERBADK-C23
SERBADK-C24
SERBADK-C25
SERBADK-C26
SERBADK-WA

为了找到第一个元素,你可以使用

main_data[0]['short_name']

作为main_data返回列表,您可以使用索引值进行迭代

由于数据是JSON格式的,因此不需要使用BeautifulSoup并从pre中选择数据。

只需使用(response.json()(将response转换为JSON并提取所需的数据。

此代码将打印所有short_names

import requests
def checkStockIdExistOrNot(stockIdNumberOrName):
url = 'https://www.bursamalaysia.com/api/v1/search/stock_list?keyword=' + str(stockIdNumberOrName) + '&lang=EN&limit=99'
response = requests.get(url)
info = response.json()
for i in info['data']:
print(i['short_name'])
checkStockIdExistOrNot('SERBADK')
SERBADK
SERBADK-C16
SERBADK-C17
SERBADK-C20
SERBADK-C21
SERBADK-C22
SERBADK-C23
SERBADK-C24
SERBADK-C25
SERBADK-C26
SERBADK-WA

既然你只想得到short_nameSERBADK和SERBADK-C17,你可以做这个

for i in info['data']:
if i['short_name'] in ['SERBADK', 'SERBADK-C17']:
print(i['short_name'])
SERBADK
SERBADK-C17

相关内容

  • 没有找到相关文章

最新更新