如何用BeautifulSoup分别提取主span下多span的价格与菜系数据?
解决爬虫提取价格与菜系的拆分问题
嘿,我来帮你搞定这个爬虫小难题!你现在遇到的是BeautifulSoup提取文本时的常见情况——直接取容器的text属性会把所有子元素的文本无差别拼接在一起,咱们只要顺着HTML的结构拆分提取就能分开价格和菜系啦。
分步实现代码
# 假设你已经完成了网页请求和BeautifulSoup初始化 from bs4 import BeautifulSoup # 定位到目标容器(你原来的代码这部分是对的) det = soup.find('span', attrs={'class': 'double-line-ellipsis'}) # 1. 提取价格:目标价格在容器内的第一个<span>标签里 price = det.find('span').get_text(strip=True) print("提取的价格:", price) # 输出:₹ 2800 for 2 (approx) # 2. 提取菜系:所有菜系都在容器内的<a>标签里 cuisine_links = det.find_all('a') # 遍历所有a标签,提取文本并去除多余空格 cuisines = [link.get_text(strip=True) for link in cuisine_links] # 把菜系列表转为你需要的字符串格式(比如用顿号分隔) cuisine_str = "、".join(cuisines) print("提取的菜系:", cuisine_str) # 输出:Cantonese、Chinese
关键思路解释
- 价格部分:HTML里价格是单独放在第一个
<span>子元素里的,所以用det.find('span')直接定位这个子标签,再用get_text(strip=True)提取干净的文本(strip=True会自动去掉文本前后的空格、换行符)。 - 菜系列表:所有菜系都是
<a>标签的文本内容,用det.find_all('a')拿到所有菜系标签,再通过列表推导式提取每个标签的文本,最后用join把列表转为适合写入Excel的字符串格式。
这样拆分后,price和cuisine_str就可以分别写入Excel的“价格”列和“菜系”列啦~
内容的提问来源于stack exchange,提问作者user3331874
相关产品推荐
相关产品推荐

