如何使用Python采集动态网页表格数据 现有Selenium脚本拓展求助
可行实现思路
- 首先优化现有代码的基础缺陷:现有代码缺少
import time依赖导入,且固定8秒等待的兼容性差,建议替换为selenium显式等待,指定等待目标元素加载完成后再执行解析,避免网络波动导致的元素获取失败。如果遇到Cloudflare人机验证,可直接用undetected-chromedriver替换原生ChromeDriver绕过验证。 - 定位各数据模块的DOM节点完成提取:
- 原有总供应量、市值提取逻辑保持不变即可
- 代币交易表:在页面中定位最近交易对应的
<table>节点,逐行遍历<tr>标签,依次提取每行的交易数量、代币名称、美元价值、BNB价值、代币单价、交易时间、钱包地址、操作按钮文本,清洗掉多余空格后按顺序拼接 - 买家/卖家榜单:分别定位页面上Buyers、Sellers对应的列表容器,逐行提取每行的钱包地址、累计交易金额、Track按钮文本即可
- 输出格式调整:将各模块提取到的内容按照你需要的结构顺序打印,先输出总供应量、市值,再依次输出交易表、买家表、卖家表。
参考修改代码
import time from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 若需要绕过Cloudflare验证,可替换为下面两行引入undetected_chromedriver # import undetected_chromedriver as uc # driver = uc.Chrome() driver = webdriver.Chrome('chromedriver.exe') url = "https://poocoin.app/tokens/0x84B7BB9614Cf28226d1b0a07499472bc107e3000" driver.get(url) # 显式等待最多15秒,等待核心元素加载完成 wait = WebDriverWait(driver, 15) wait.until(EC.presence_of_element_located((By.CLASS_NAME, "px-3"))) wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "table"))) soup = BeautifulSoup(driver.page_source, 'lxml') # 原有总供应量、市值提取 ts = soup.find('div', class_='px-3') x = list(ts.stripped_strings)[:5] print(f'{x[0]}\n{x[1]}\n{x[2]}{x[3]}\n{x[4]}\n') # 提取交易表 print("Token tx: gather all data in table") tx_table = soup.select_one("table") # 若定位不准可替换为更精准的css选择器 for row in tx_table.select("tr"): cols = [col.text.strip() for col in row.select("td") if col.text.strip()] if cols: print("\t".join(cols)) print() # 提取买家表 print("Buyers: gather all data in table") # 选择器可根据实际DOM结构调整,打开浏览器F12元素选择器点击对应模块即可获取精准选择器 buyer_container = soup.select_one("div.buyer-list") for item in buyer_container.select(".list-item"): item_data = [i.text.strip() for i in item.children if i.text.strip()] print("\t".join(item_data)) print() # 提取卖家表 print("Sellers: gather all data in table") # 选择器可根据实际DOM结构调整 seller_container = soup.select_one("div.seller-list") for item in seller_container.select(".list-item"): item_data = [i.text.strip() for i in item.children if i.text.strip()] print("\t".join(item_data)) driver.quit()
注:代码里的CSS选择器需要你根据当前poocoin页面的实际DOM结构微调,打开浏览器F12元素选择器点击对应模块就能拿到精准的选择器。
内容的提问来源于stack exchange,提问作者Jacmojz
相关产品推荐
相关产品推荐

