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

BeautifulSoup如何检测元素存在并新增库存状态列到爬取数据中

问题原因

现有代码将有货、无货元素的查找放在同一个try捕获块中,而任意商品必然只存在其中一类库存元素,另一类元素查找会返回None,调用.text.strip()时就会触发AttributeError,直接跳过整个商品的录入,最终只能捕获到少量(甚至捕获不到)单一库存状态的商品。

调整方案
  • 拆分库存判断逻辑,基础信息(标题、价格)缺失才跳过当前商品,库存状态单独判断,不触发全局跳过
  • 新增统一的库存状态字段,方便后续统计分析
  • 修复原代码中被注释的分页逻辑,支持批量抓取多页数据
修改后完整代码
#--Web scraping packages
from bs4 import BeautifulSoup
import requests
#Pandas/numpy for data manipulation
import pandas as pd
import numpy as np

final_list=[]

# 分页配置,可按需调整最大抓取页数
url_template = 'https://www.hillsidehanddryers.com/dryers/?page={}'
max_page = 3

for pg in range(1, max_page+1):
    current_url = url_template.format(pg)
    r=requests.get(current_url)
    soup = BeautifulSoup(r.text, 'lxml')

    for paragraph in soup.find_all('div',class_='innermargin'):
        try:
            # 基础信息缺失才跳过当前商品
            title=paragraph.find('h4').text.strip()
            price=paragraph.find('p',class_='price').text.strip()
            
            # 单独判断库存状态
            nostock_elem = paragraph.find('a',class_='cta nostock')
            instock_elem = paragraph.find('a', class_='cta primary')
            
            if nostock_elem:
                stock_status = "无货"
                stock_btn_text = nostock_elem.text.strip()
            elif instock_elem:
                stock_status = "有货"
                stock_btn_text = instock_elem.text.strip()
            else:
                stock_status = "未知"
                stock_btn_text = ""
            
            final_list.append([title, price, stock_status, stock_btn_text])
        except AttributeError:
            pass

df = pd.DataFrame(final_list,columns=['商品名称','价格','库存状态','库存按钮文本'])
# 查看前100条数据
print(df.head(100))
# 如需导出到本地可取消下行注释
# df.to_excel("商品库存统计.xlsx", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:15:07