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

如何用Bs4和Requests在Python中生成指定数据字典?

解决Python提取尺码信息并生成字典的问题

嘿,我来帮你搞定这个问题!你之前的思路其实没问题——遍历m-productDescr_sizeItem元素是正确的方向,只是可能没找准每个项里的关键子元素。咱们用Python的BeautifulSoup库来实现这个字典,步骤很清晰:

首先,确保你已经安装了BeautifulSoup(如果还没装,执行pip install beautifulsoup4即可)。接下来直接上代码和解释:

完整代码实现

from bs4 import BeautifulSoup

# 假设你的页面源码已经存在这个变量里(如果是爬虫获取的,替换成requests.get返回的text即可)
html_content = """
<div data-header-element=".b-userMenu" data-sticky-header="true" id="js-size-pick"> 
<p class="m-productDescr_sizeItem"> 
<a class="m-productDescr_sizeBtn js-sizeItem js-tooltipHtml js-tooltip_rm" data-carturl="/cart/add?id=545896443" data-tip=" &lt;span&gt; US: 3,5Y &lt;/span&gt; &lt;span&gt; EU: 35,5 &lt;/span&gt; &lt;span&gt; CM: 22,5 &lt;/span&gt; " data-value="545896443"> 35,5 </a> 
<span class="js-tooltipContent g-dn"> 
<span> US: 3,5Y </span> 
<span> EU: 35,5 </span> 
<span> CM: 22,5 </span> 
</span> 
</p> 
<p class="m-productDescr_sizeItem"> 
<a class="m-productDescr_sizeBtn js-sizeItem js-tooltipHtml js-tooltip_rm" data-carturl="/cart/add?id=545895979" data-tip=" &lt;span&gt; US: 4Y &lt;/span&gt; &lt;span&gt; EU: 36 &lt;/span&gt; &lt;span&gt; CM: 23 &lt;/span&gt; " data-value="545895979"> 36 </a> 
<span class="js-tooltipContent g-dn"> 
<span> US: 4Y </span> 
<span> EU: 36 </span> 
<span> CM: 23 </span> 
</span> 
</p>
"""

# 解析HTML
soup = BeautifulSoup(html_content, 'html.parser')
size_info_dict = {}

# 遍历每个尺码项
for size_item in soup.find_all('p', class_='m-productDescr_sizeItem'):
    # 提取data-value作为字典的键
    data_value_key = size_item.find('a')['data-value']
    # 提取对应的US尺码信息(从tooltip内容里取第一个span的文本)
    us_size_text = size_item.find('span', class_='js-tooltipContent').find_all('span')[0].get_text(strip=True)
    # 把键值对加入字典
    size_info_dict[data_value_key] = us_size_text

# 打印结果
print(size_info_dict)

代码解释

  1. 解析HTML:用BeautifulSoup把页面源码转换成可操作的对象,方便定位元素。
  2. 遍历尺码项:通过find_all找到所有m-productDescr_sizeItem类的p标签,每个标签对应一个尺码选项。
  3. 提取键值:
    • 每个p标签里的a标签带有data-value属性,直接提取作为字典的键。
    • 对应的尺码信息在js-tooltipContent类的span标签里,第一个span就是US尺码,用get_text(strip=True)去除多余空格后作为值。

备选方案(从data-tip提取)

如果担心js-tooltipContent被CSS隐藏影响提取,也可以直接从a标签的data-tip属性里解析尺码信息:

for size_item in soup.find_all('p', class_='m-productDescr_sizeItem'):
    data_value_key = size_item.find('a')['data-value']
    # 解析data-tip里的HTML内容
    tip_html = size_item.find('a')['data-tip']
    tip_soup = BeautifulSoup(tip_html, 'html.parser')
    us_size_text = tip_soup.find_all('span')[0].get_text(strip=True)
    size_info_dict[data_value_key] = us_size_text

运行代码后,你会得到这样的字典:

{'545896443': 'US: 3,5Y', '545895979': 'US: 4Y'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:30:26