我正在尝试为以下页面设置网络抓取工具: 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()
