如何用Python BeautifulSoup提取td文本存入字典并生成pandas DataFrame
原代码错误点
- 你已经通过
soup.find_all("td",class_="text-center")拿到了元素,后续又在元素下查找,不可能找到匹配节点,导致datas为空,最终字典没有数据 - 没有按表格行、表头的结构解析数据,直接零散提取无法对应列和行的关系
- 没有区分三个页面的解析结果,无法生成三个独立的DataFrame
修正后可直接运行的方案
import pandas as pd import requests from bs4 import BeautifulSoup # 加请求头避免被网站反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } url_list = [ 'https://www.coingecko.com/en/coins/ethereum/historical_data/usd?start_date=2021-08-06&end_date=2021-09-05#panel', 'https://www.coingecko.com/en/coins/cardano/historical_data/usd?start_date=2021-08-06&end_date=2021-09-05#panel', 'https://www.coingecko.com/en/coins/chainlink/historical_data/usd?start_date=2021-08-06&end_date=2021-09-05#panel' ] # 按顺序存储三个页面对应的DataFrame df_list = [] for url in url_list: response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 定位页面上的历史数据表 table = soup.select_one("table.table.table-striped.text-sm.text-gray-900") # 提取表格表头 col_headers = [th.get_text(strip=True) for th in table.select("thead th")] # 逐行提取表格内容 row_data = [] for tr in table.select("tbody tr"): row = [td.get_text(strip=True) for td in tr.select("td")] row_data.append(row) # 生成当前页面对应的DataFrame存入列表 df = pd.DataFrame(row_data, columns=col_headers) df_list.append(df) # 三个表格分别对应df_list[0](以太坊)、df_list[1](Cardano)、df_list[2](Chainlink)
内容的提问来源于stack exchange,提问作者Roxana Slj
相关产品推荐
相关产品推荐

