Python网页爬取问题:获取LumiWallet全页资产名称与代码
解决方案:爬取Lumi Wallet所有资产列表并导出CSV
问题分析
你的代码存在三个核心问题:
- 使用
soup.find()只会返回第一个匹配的元素,因此只能获取第一个代币;需要用find_all()遍历页面所有资产项。 - 提取代币代码时,class参数写错成了
class__(多了一个下划线),正确参数是class_,这是无法获取代码的直接原因。 - 未处理分页逻辑,网站共27页,需要循环遍历每一页的URL。
修正后的完整代码
import requests from bs4 import BeautifulSoup import pandas as pd from urllib.parse import urlencode API_KEY = '7bbcbb39-029f-4075-97bc-6b57b6e9e68b' def get_scrapeops_url(url): payload = {'api_key': API_KEY, 'url': url} proxy_url = 'https://proxy.scrapeops.io/v1/?' + urlencode(payload) return proxy_url # 存储所有资产数据的列表 data = [] # 遍历27页(页面从1到27) for page_num in range(1, 28): # 构造当前页的URL page_url = f'https://lumiwallet.com/assets/?page={page_num}' # 获取页面响应 r = requests.get(get_scrapeops_url(page_url)) soup = BeautifulSoup(r.text, 'html.parser') # 找到所有资产项的容器(每个资产对应一个asset-item) asset_items = soup.find_all('div', class_='asset-item') # 遍历每个资产项,提取名称和代码 for item in asset_items: # 提取资产名称 name_elem = item.find('div', class_='asset-item__name') name = name_elem.text.strip() if name_elem else None # 提取资产代码(注意class_的下划线数量) ticker_elem = item.find('div', class_='asset-item__short-name') ticker = ticker_elem.text.strip() if ticker_elem else None # 将数据加入列表 data.append({'name': name, 'ticker': ticker}) # 转换为DataFrame并导出CSV data_df = pd.DataFrame(data) data_df.to_csv("coins_scrape_lumi.csv", index=False) print(f"爬取完成,共获取{len(data_df)}条资产数据") print(data_df.head())
关键修改点说明
- 分页处理:通过
range(1,28)生成1到27的页码,构造带page参数的URL,循环爬取每一页。 - 批量提取资产:用
soup.find_all('div', class_='asset-item')获取页面所有资产项,再逐个遍历提取数据。 - 修正class参数:将
ticker的class__改为正确的class_,确保能匹配到代码元素。 - 数据清洗:用
.strip()去除文本前后的空白字符,让数据更整洁。
注意事项
- 若爬取过程中出现请求频率限制,可在循环中添加
time.sleep(1)(需要导入time模块),降低请求速度。 - 检查API_KEY是否有效,确保ScrapeOps代理能正常工作。
内容的提问来源于stack exchange,提问作者Zer0chance_
相关产品推荐
相关产品推荐

