Skip to main content
 首页 » 编程设计

python之BeautifulSoup 不拾取单个标签

2025年05月04日23itcoder

我正在尝试为以下页面设置网络抓取工具: https://www.autozone.com/external-engine/oil-filter?pageNumber=1

#connect and download html 
data = 'https://www.autozone.com/motor-oil-and-transmission-fluid/engine-oil?pageNumber=1' 
uclient = urlopen(data) 
pagehtml= uclient.read() 
uclient.close() 
articles = bs(pagehtml,'html.parser') 
 
#separate data by shop items 
containers = articles.find_all('div',{'class' : 'shelfItem'}) 

但是,当我尝试获取价格时,什么也找不到:

containers[0].find_all('div',{'class':'price'}) 

...在使用我的浏览器检查网站时显示以下内容:

<div class="price" id="retailpricediv_663653_0" style="height: 85px;">Price: <strong>$8.99</strong><br> 

我怎样才能拿到那 8.99 美元?

谢谢

请您参考如下方法:

我认为价格是由 javascript 加载的,因此需要像 selenium 这样的方法来确保值存在(或其他答案中所示的 API 调用!)

from selenium import webdriver 
import pandas as pd 
 
driver = webdriver.Chrome() 
driver.get("https://www.autozone.com/motor-oil-and-transmission-fluid/engine-oil?pageNumber=1") 
products = driver.find_elements_by_css_selector('.prodName') 
prices = driver.find_elements_by_css_selector('.price[id*=retailpricediv]') 
 
productList = [] 
priceList = [] 
for product, price in zip(products,prices): 
    productList.append(product.text) 
    priceList.append(price.text.split('\n')[0].replace('Price: ','')) 
 
df = pd.DataFrame({'Product':productList,'Price':priceList}) 
print(df) 
 
driver.quit()