如何用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=" <span> US: 3,5Y </span> <span> EU: 35,5 </span> <span> CM: 22,5 </span> " 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=" <span> US: 4Y </span> <span> EU: 36 </span> <span> CM: 23 </span> " 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)
代码解释
- 解析HTML:用BeautifulSoup把页面源码转换成可操作的对象,方便定位元素。
- 遍历尺码项:通过
find_all找到所有m-productDescr_sizeItem类的p标签,每个标签对应一个尺码选项。 - 提取键值:
- 每个p标签里的a标签带有
data-value属性,直接提取作为字典的键。 - 对应的尺码信息在
js-tooltipContent类的span标签里,第一个span就是US尺码,用get_text(strip=True)去除多余空格后作为值。
- 每个p标签里的a标签带有
备选方案(从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
相关产品推荐
相关产品推荐

