如何在 python 和 beautifulsoup 中获取 table 内的百分比值
How to grab the percentage values inside the table in python and beautifulsoup
我已经设法找出我正在尝试工作的 url 的 iframe direct link,感谢@Ram。但是我的新代码片段有一些问题。
问题 #1:未显示正确的百分比值
问题 #2:我不知道如何在 "i class="far fa-file-alt text-secondary" data-toggle= 中获取标题文本 "Contract" "tooltip" title="" data-original-title="合约"
import requests
from bs4 import BeautifulSoup
url = "https://bscscan.com/token/generic-tokenholders2?m=normal&a=0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3"
header = {"User-Agent": "Mozilla/5.0"}
reqblockdetails = requests.get(url,header, timeout=5)
soupblockdetails = BeautifulSoup(reqblockdetails.content, 'html.parser')
rowsblockdetails = soupblockdetails.findAll('table')[0].findAll('tr', limit=10)#[1:]
for row in rowsblockdetails[1:]:
rank = row.find_all('td')[0].text[0:].strip()
address = row.find_all('td')[1].text[0:].strip()
amount = row.find_all('td')[2].text[0:].strip()
percentage = row.find_all('td')[3].text[0:]
print (" {:<3} {:<25} {:>15} {:>10} ".format(rank, address, amount, percentage))
当前输出:# 最后一列显示 0.0000% 是问题所在
1 0x0000000000000000000000000000000000000001 422,619,084,856,497.90460343 0.0000%
2 0x8c128dba2cb66399341aa877315be1054be75da8 37,995,040,112,894.283191536 0.0000%
3 0xa8736b9585a01d6dcc1b6e2fc9dc208552c34b58 20,000,000,001,566.132214712 0.0000%
4 PancakeSwap: SAFEMOON 14,559,745,452,918.021161369 0.0000%
5 0xff3dd404afba451328de089424c74685bf0a43c9 14,301,351,821,601.347718476 0.0000%
想要的输出:#-- 合同来自 -> i class="far fa-file-alt text-secondary"
1 0x0000000000000000000000000000000000000001 422,619,084,856,497.90460343 42.2608%
2 0x8c128dba2cb66399341aa877315be1054be75da8 37,995,040,112,894.283191536 3.7991%
3 0xa8736b9585a01d6dcc1b6e2fc9dc208552c34b58 20,000,000,001,566.132214712 2.0000% Contract
4 PancakeSwap: SAFEMOON 14,559,745,452,918.021161369 1.4684% Contract
5 0xff3dd404afba451328de089424c74685bf0a43c9 14,301,351,821,601.347718476 1.4421% Contract
for row in rowsblockdetails[1:]:
rank = row.find_all('td')[0].text[0:].strip()
address = row.find_all('td')[1].text[0:].strip()
amount = row.find_all('td')[2].text[0:].strip()
percentage = row.find_all('td')[3].text[0:]
try:
cnt=row.select_one("i.far.fa-file-alt.text-secondary")['title']
except:
cnt=""
print (" {:<3} {:<25} {:>15} {:>10} {:<20} ".format(rank, address, amount, percentage,cnt))
输出:
1 0x0000000000000000000000000000000000000001 422,620,418,588,552.378931106 0.0000%
2 0x8c128dba2cb66399341aa877315be1054be75da8 37,990,958,290,743.368378822 0.0000%
3 0xa8736b9585a01d6dcc1b6e2fc9dc208552c34b58 20,000,000,001,566.132214712 0.0000% Contract
.....
我已经设法找出我正在尝试工作的 url 的 iframe direct link,感谢@Ram。但是我的新代码片段有一些问题。
问题 #1:未显示正确的百分比值
问题 #2:我不知道如何在 "i class="far fa-file-alt text-secondary" data-toggle= 中获取标题文本 "Contract" "tooltip" title="" data-original-title="合约"
import requests
from bs4 import BeautifulSoup
url = "https://bscscan.com/token/generic-tokenholders2?m=normal&a=0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3"
header = {"User-Agent": "Mozilla/5.0"}
reqblockdetails = requests.get(url,header, timeout=5)
soupblockdetails = BeautifulSoup(reqblockdetails.content, 'html.parser')
rowsblockdetails = soupblockdetails.findAll('table')[0].findAll('tr', limit=10)#[1:]
for row in rowsblockdetails[1:]:
rank = row.find_all('td')[0].text[0:].strip()
address = row.find_all('td')[1].text[0:].strip()
amount = row.find_all('td')[2].text[0:].strip()
percentage = row.find_all('td')[3].text[0:]
print (" {:<3} {:<25} {:>15} {:>10} ".format(rank, address, amount, percentage))
当前输出:# 最后一列显示 0.0000% 是问题所在
1 0x0000000000000000000000000000000000000001 422,619,084,856,497.90460343 0.0000%
2 0x8c128dba2cb66399341aa877315be1054be75da8 37,995,040,112,894.283191536 0.0000%
3 0xa8736b9585a01d6dcc1b6e2fc9dc208552c34b58 20,000,000,001,566.132214712 0.0000%
4 PancakeSwap: SAFEMOON 14,559,745,452,918.021161369 0.0000%
5 0xff3dd404afba451328de089424c74685bf0a43c9 14,301,351,821,601.347718476 0.0000%
想要的输出:#-- 合同来自 -> i class="far fa-file-alt text-secondary"
1 0x0000000000000000000000000000000000000001 422,619,084,856,497.90460343 42.2608%
2 0x8c128dba2cb66399341aa877315be1054be75da8 37,995,040,112,894.283191536 3.7991%
3 0xa8736b9585a01d6dcc1b6e2fc9dc208552c34b58 20,000,000,001,566.132214712 2.0000% Contract
4 PancakeSwap: SAFEMOON 14,559,745,452,918.021161369 1.4684% Contract
5 0xff3dd404afba451328de089424c74685bf0a43c9 14,301,351,821,601.347718476 1.4421% Contract
for row in rowsblockdetails[1:]:
rank = row.find_all('td')[0].text[0:].strip()
address = row.find_all('td')[1].text[0:].strip()
amount = row.find_all('td')[2].text[0:].strip()
percentage = row.find_all('td')[3].text[0:]
try:
cnt=row.select_one("i.far.fa-file-alt.text-secondary")['title']
except:
cnt=""
print (" {:<3} {:<25} {:>15} {:>10} {:<20} ".format(rank, address, amount, percentage,cnt))
输出:
1 0x0000000000000000000000000000000000000001 422,620,418,588,552.378931106 0.0000%
2 0x8c128dba2cb66399341aa877315be1054be75da8 37,990,958,290,743.368378822 0.0000%
3 0xa8736b9585a01d6dcc1b6e2fc9dc208552c34b58 20,000,000,001,566.132214712 0.0000% Contract
.....