Web Scraping求助:如何将抓取数据转换为CSV格式?
解决Web Scraping导出CSV时的None属性问题并生成规整表格
你当前的代码仅完成了页面请求与HTML解析,缺少数据提取和CSV导出的核心环节。另外,多数网站的统计数据会通过API返回JSON格式(对应你提到的开发者工具网络响应数据块),用JSON解析比BeautifulSoup处理HTML更高效,也更容易生成规整表格。以下是分步解决方案:
步骤1:确认数据来源(优先用JSON接口)
打开开发者工具的「网络」标签,刷新页面后定位返回统计数据的API请求(通常以.json结尾,或响应内容为JSON格式),复制该请求的URL替换原页面URL。
步骤2:提取并整理数据
如果是JSON接口,直接用requests获取并解析为Python列表/字典;若数据嵌入HTML,则用BeautifulSoup定位元素提取字段。以下以更适合生成表格的JSON接口为例:
步骤3:处理None值并导出CSV
使用pandas库可快速将结构化数据导出为CSV,自动对齐列,还能轻松处理缺失值(None)。
修改后的完整代码
import requests import pandas as pd # 替换为你找到的JSON数据接口URL API_URL = "<YOUR JSON API URL HERE>" headers = { 'accept': '*/*', 'cookie': 'cookie-consent=true' } # 请求并解析JSON数据 response = requests.get(API_URL, headers=headers) data_list = response.json() # 清洗数据:将所有None替换为空字符串,避免导出报错 cleaned_data = [] for item in data_list: cleaned_item = {key: value if value is not None else "" for key, value in item.items()} cleaned_data.append(cleaned_item) # 生成DataFrame并导出CSV,自动匹配列名(id、game_id等) df = pd.DataFrame(cleaned_data) df.to_csv("game_stats.csv", index=False, encoding='utf-8-sig') print("CSV文件已成功生成!")
若数据在HTML页面中的处理方式
如果数据确实嵌入HTML,需先定位包含数据的元素(如表格行、div块),再逐个提取字段:
import requests from bs4 import BeautifulSoup import pandas as pd URL = "<YOUR PAGE URL HERE>" headers = { 'accept': '*/*', 'cookie': 'cookie-consent=true' } page = requests.get(URL, headers=headers) soup = BeautifulSoup(page.content, 'html.parser') # 假设数据在class为"stats-item"的div块中,需根据实际页面结构修改选择器 data_blocks = soup.find_all("div", class_="stats-item") cleaned_data = [] for block in data_blocks: # 逐个提取字段,每个字段添加非空判断避免None item = { "id": block.find("span", class_="id").text.strip() if block.find("span", class_="id") else "", "game_id": block.find("span", class_="game-id").text.strip() if block.find("span", class_="game-id") else "", # 继续添加剩余43个字段,保持相同的非空判断逻辑 } cleaned_data.append(item) # 导出CSV df = pd.DataFrame(cleaned_data) df.to_csv("game_stats.csv", index=False, encoding='utf-8-sig')
关键注意事项
- 对所有提取的字段添加非空判断(
if ... else ""),彻底避免导出时的None属性报错。 - 若使用pandas,需先在命令行执行
pip install pandas完成安装。 - 确保列名(id、game_id等)与数据中的键完全对应,保证CSV列匹配正确。
内容的提问来源于stack exchange,提问作者cricket
相关产品推荐
相关产品推荐

