python - 如何从python和beautifulsoup中的页面抓取iframe数据范围

标签 python python-3.x web-scraping iframe beautifulsoup

我正在尝试获取页面的 iframe 数据。我找到了一些有效的资源,但我无法让它工作来获取我想要的数据。

import requests
from bs4 import BeautifulSoup

s = requests.Session()
r = s.get("https://bscscan.com/token/0xe56842ed550ff2794f010738554db45e60730371#balances")

soup = BeautifulSoup(r.content, "html.parser")
iframe_src = soup.select_one("#tokeholdersiframe").attrs["src"]

r = s.get(f"https:{iframe_src}")
soup = BeautifulSoup(r.content, "html.parser")

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))
当前输出:# 错误
Traceback (most recent call last):
  r = s.get(f"https:{iframe_src}")
  return self.request('GET', url, **kwargs)
  raise InvalidURL("Invalid URL %r: No host supplied" % url)
想要的输出:
1   UniCrypt: Token Vesting                        150,000,000                    15.0451%  Contract             
2   PancakeSwap V2: BIN 17                         77,320,752.850881264572940617  8.1141%   Contract             
3   0xa36b9dc17e421d86ddf8e490dafa87344e76125b     49,463,154.04616156547917712   4.9612%                       
4   0xbbda05ea467ad348212dade5c38c11910c14e83e     48,704,064.094074959661726945  4.8769%                       
5   0xcfdb8569fb546a010bb22b5057679c4053d4a231     11,493,129.656390775184191781  1.1528%                       

最佳答案

可以直接获取iframe HTML,只需要地址:

import requests
from bs4 import BeautifulSoup

s = requests.Session()

iframe_src = "https://bscscan.com/token/generic-tokenholders2?m=normal&a=0xe56842ed550ff2794f010738554db45e60730371"
r = s.get(iframe_src)
soup = BeautifulSoup(r.content, "html.parser")

for row in soup.select("tr:has(td)"):
    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} {:<45} {:^35} {:>10} ".format(rank, address, amount, percentage)
    )
打印:
 1   UniCrypt: Token Vesting                                   150,000,000               0.0000%  
 2   PancakeSwap V2: BIN 17                           76,926,258.749406306830460162      0.0000%  
 3   0xa36b9dc17e421d86ddf8e490dafa87344e76125b       49,463,154.04616156547917712       0.0000%  
 4   0xbbda05ea467ad348212dade5c38c11910c14e83e       48,770,394.148172297052962199      0.0000%  
 5   0xcfdb8569fb546a010bb22b5057679c4053d4a231       11,493,129.656390775184191781      0.0000%  
 6   0xe56842ed550ff2794f010738554db45e60730371       10,236,437.028812018664646028      0.0000%  
 7   0x1a1db1616854b4fe4723925f7129188483500eb6                10,000,000                0.0000%  
 8   0xa8b398896d67cea6d26fc140e056f745261c4b00       9,024,167.759368544603338806       0.0000%  
 9   0x0d9b1e53cbb251572d982d9f96520e8d40d22bb0                 7,200,000                0.0000%  
 10  0x934f895383a6eb7d8a8cfd6c894f7fb57ad5f2b1       7,078,575.994558878120028183       0.0000%  
 11  0x739621ea040cf397a169047df2935458c6502d63                 7,000,000                0.0000%  
 12  0xc7129c10f8056986716effffbbe0f1e9c80622d8       5,307,909.106163478741030017       0.0000%  
 13  0x43e5959343cd9154080c235c16fbb4bbd7f83e70       5,215,489.453108218359291854       0.0000%  
 14  0xa7a9544d86066bf583be602195536918497b1fff                 5,000,000                0.0000%  
 15  0x81da471feb4a45438053dc05e709be056ec26c39                 4,900,400                0.0000%  
 16  0xc68446c2a2e03e932774c3353629b9979b380c72       4,846,096.854970087386140103       0.0000%  
 17  0xb6957013a430e4cf509a4c51002073c1b24356e2       4,641,857.889152974553322217       0.0000%  
 18  0x4b0005c7bba3e10820b5b3a2863821e00701b383       4,570,260.896212362994501438       0.0000%  
 19  0xe02752824b6b11e027080e75f692bd22b3dc7091       4,388,894.363703154394892711       0.0000%  

...and so on.

关于python - 如何从python和beautifulsoup中的页面抓取iframe数据范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68959358/

相关文章:

python - 如何在sklearn中同时获取预测值和误差指标

python - 如何计算嵌套列表中局部最大值的数量?

python - 找不到带有 Selenium 的按钮

python - 在Python中搜索和分割带有特殊字符的字符串

javascript - Python urllib.unquote_plus node.js 等效项

python - 如何在python中加载Alignment格式?

python - 我固定的 pyOpenSSL 版本 19.0.0 突然坏了

javascript - Puppeteer:从使用延迟加载的页面中抓取整个 html

python - 错误 : No such file or directory

python - 在 Python 的 format() 函数中使用变量