Python BeautifulSoup中find与select_one获取价格结果不一致求助
解决BeautifulSoup select_one无法获取价格的问题
嘿,我看到你在用BeautifulSoup的select_one方法时卡壳了,其实问题出在CSS选择器的语法细节上!
问题根源
你写的select_one('._1vC4OE _2rQ-NK')里,空格在CSS选择器中代表“后代元素”——意思是找_1vC4OE类元素下的_2rQ-NK类子元素,但实际上价格元素是同时拥有这两个类名的单个元素,所以这种写法根本匹配不到目标。
正确的select_one写法
把多个类名用.连接(不要空格),就能精准匹配同时拥有这两个类的元素了。修改后的代码如下:
import requests from bs4 import BeautifulSoup import pandas as pd r = requests.get('https://www.flipkart.com/laptops/~buyback-guarantee-on-laptops-/pr?sid=6bo%2Cb5g&uniqBStoreParam1=val1&wid=11.productCard.PMU_V2') soup = BeautifulSoup(r.text, 'lxml') results = soup.select('._31qSD5') # 加个判断避免索引越界,让代码更健壮 if results: result = results[0] # 关键修改:用.连接多个类名 price = result.select_one('._1vC4OE._2rQ-NK').text[1:] print(price) else: print("未找到产品卡片元素")
为什么find方法能生效?
你用find('div',{'class':'_1vC4OE _2rQ-NK'})时,BeautifulSoup会自动匹配同时包含这两个类名的元素,逻辑和CSS选择器里.连接多个类的效果一致,所以能成功获取价格。
内容的提问来源于stack exchange,提问作者pythonbeginner
相关产品推荐
相关产品推荐

