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

Python网页抓取中如何提取data-id对应的内容?

问题描述

需要从网站提取产品名称、产品编号、价格和规格,但没有可用的class来解析HTML结构,只能依赖data-type、data-id属性以及内部的tr、td标签。目前搜索data-id时仅能获取标签本身,无法提取内部内容,尝试多种方法均无效,现有Python代码如下:

from cgitb import text
from pickle import TRUE
from bs4 import BeautifulSoup 
import requests
import urllib
import pandas as pd
import json

url = "https://www.albelli.nl/prijsoverzicht"

result = requests.get(url)
doc = BeautifulSoup(result.text, "html.parser")

WholeDoc = doc.find('div', 'arc3-container arc3-margin--bottom-none arc3-margin--top-none price-overview--content')

for letstry in WholeDoc.find_all('div', attrs={'data-type' : 'Photobook'}):
   for item in letstry.find_all('tbody'):
    for moop in item.find_all('tr', attrs=('data-id')):
        print(moop)

错误原因

你使用attrs=('data-id')的写法不符合BeautifulSoup的语法要求,attrs参数需要传入字典格式来指定属性条件,或者直接用{'data-id': True}匹配所有包含data-id属性的tr标签。元组格式的写法无法正确识别属性规则,导致只能拿到标签对象,无法提取内部的产品信息。

修正后的代码

from bs4 import BeautifulSoup 
import requests
import pandas as pd

url = "https://www.albelli.nl/prijsoverzicht"

result = requests.get(url)
doc = BeautifulSoup(result.text, "html.parser")

# 定位目标内容容器
WholeDoc = doc.find('div', 'arc3-container arc3-margin--bottom-none arc3-margin--top-none price-overview--content')

# 遍历Photobook类别的所有区块
for photobook_section in WholeDoc.find_all('div', attrs={'data-type': 'Photobook'}):
    # 处理每个tbody下的产品行
    for tbody in photobook_section.find_all('tbody'):
        # 匹配所有带data-id属性的产品行
        for product_row in tbody.find_all('tr', {'data-id': True}):
            # 提取产品编号(data-id属性值)
            product_id = product_row.get('data-id')
            # 提取td中的产品信息
            tds = product_row.find_all('td')
            if len(tds) >= 3:
                product_name = tds[0].get_text(strip=True)
                product_spec = tds[1].get_text(strip=True)
                product_price = tds[2].get_text(strip=True)
                
                # 输出提取结果
                print(f"产品编号: {product_id}")
                print(f"产品名称: {product_name}")
                print(f"产品规格: {product_spec}")
                print(f"产品价格: {product_price}")
                print("---")

关键说明

  • 用{'data-id': True}是BeautifulSoup中匹配存在指定属性标签的标准写法,能精准定位所有带data-id的产品行
  • 通过get('data-id')可以直接获取该属性的取值(即产品编号)
  • 使用get_text(strip=True)提取文本时会自动去除多余的空格、换行符,让结果更整洁
  • 若需要批量存储数据,可以将提取的信息存入列表,最后转为pandas.DataFrame方便后续分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:46:08