You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BeautifulSoup识别表格数据所属分类并添加对应列?

问题描述

爬取网址https://takipcimerkezi.net/services的表格数据(除“aciklama”外的所有信息),现有代码如下:

from bs4 import BeautifulSoup
import requests
import pandas as pd
import numpy as np

url='https://takipcimerkezi.net/services'
page= requests.get(url)
table=BeautifulSoup(page.content, 'html.parser')

max_sipariş= table.find_all(attrs={"data-label":"Maksimum Sipariş"})
maxsiparis=[]
for i in max_sipariş:
    value=i.text
    
    maxsiparis.append(value)
min_sipariş= table.find_all(attrs={"data-label":"Minimum Sipariş"})
minsiparis=[]
for i in min_sipariş:
    value=i.text
    
minsiparis.append(value)
bin_adet_fiyati= table.find_all(attrs={"data-label":"1000 adet fiyatı "})
binadetfiyat=[]
for i in bin_adet_fiyati:
    value=i.text.strip()
    binadetfiyat.append(value)

id= table.find_all(attrs={"data-label":"ID"})
idlist=[]
for i in id:
    value=i.text
    idlist.append(value)

servis= table.find_all(attrs={"data-label":"Servis"})
servislist=[]
for i in servis:
    value=i.text
    servislist.append(value)

数据存入Excel后,每行包含ID、Servis、最低订单量、最高订单量、千份价格等字段,现在需要新增一列标记每行数据的所属分类:

  • ID为“158”的行属于“Önerilen Servisler”分类
  • ID为“4”“1526”“1”“1494”……“1537”的行属于“Instagram %100 Gerçek Premium Servisler”分类
解决方案

可以通过两种方式实现分类标记:手动映射或自动从网页提取分类关系。

方法1:手动建立ID-分类映射

适合分类对应ID数量较少的场景:

  1. 先将现有数据整合到Pandas DataFrame中:
# 整合数据到DataFrame
df = pd.DataFrame({
    "ID": idlist,
    "Servis": servislist,
    "Minimum Sipariş": minsiparis,
    "Maksimum Sipariş": maxsiparis,
    "1000 adet fiyatı": binadetfiyat
})
  1. 定义ID与分类的映射字典,补充所有需要标记的ID:
category_mapping = {
    "158": "Önerilen Servisler",
    "4": "Instagram %100 Gerçek Premium Servisler",
    "1526": "Instagram %100 Gerçek Premium Servisler",
    "1": "Instagram %100 Gerçek Premium Servisler",
    "1494": "Instagram %100 Gerçek Premium Servisler",
    "1537": "Instagram %100 Gerçek Premium Servisler"
    # 其他ID对应的分类可继续添加
}
  1. 新增“分类”列,用map()匹配映射关系,未匹配的标记为“其他”:
df["分类"] = df["ID"].map(category_mapping).fillna("其他")
  1. 保存到Excel:
df.to_excel("服务数据带分类.xlsx", index=False)

方法2:自动从网页提取分类关系

适合分类对应ID数量多、不想手动维护的场景,直接从网页结构中获取分类标题与对应行的关联:

# 提取网页中的分类标题和对应行的ID
categories = table.find_all("h3")
rows = table.find_all("tr")

current_category = None
category_id_map = {}

for row in rows:
    # 检查当前行的前一个兄弟节点是否是分类标题h3
    h3_tag = row.find_previous_sibling("h3")
    if h3_tag:
        current_category = h3_tag.text.strip()
    # 提取当前行的ID
    id_cell = row.find(attrs={"data-label":"ID"})
    if id_cell and current_category:
        category_id_map[id_cell.text.strip()] = current_category

# 整合数据并添加分类列
df = pd.DataFrame({
    "ID": idlist,
    "Servis": servislist,
    "Minimum Sipariş": minsiparis,
    "Maksimum Sipariş": maxsiparis,
    "1000 adet fiyatı": binadetfiyat
})
df["分类"] = df["ID"].map(category_id_map).fillna("其他")

# 保存到Excel
df.to_excel("服务数据带分类.xlsx", index=False)

这种方法会自动识别网页中每个分类下的所有服务ID,不需要手动维护映射关系,适配网页结构的动态变化。

内容的提问来源于stack exchange,提问作者luthierz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:35:43