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
相关产品推荐
相关产品推荐

