我试图创建一个BeautifulSoup价格网络抓取工具。以下是我对抓取感兴趣的网站所显示的内容。
<div class="product-total-price">
<span itemprop="price">$14.76</span>
定价&#34; $ 14.76&#34;是我感兴趣的。但是当我试图归还它时
import bs4
import requests
def getPrice(productUrl):
res = requests.get(productUrl)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
return soup.select("div.product-total-price > span")[0].parent
price = getPrice('https://www.homedepot.ca/en/home/p.12-sheetrock-ultralight-drywall-gypsum-panel-4-x-12.1000149007.html')
print(price)
输出是:
-
我用.parent来看看会发生什么
<div class="product-total-price">
<span itemprop="price">-</span>
并没有显示定价。我是编程新手,并试图研究这个,但没有运气。任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
如serk所述,页面没有用美丽的汤完全呈现。这就是为什么我得到响应' - '因为它只是价格的占位符,直到页面可以调用一些javascript。这反过来会改变定价。这是我的解决方法
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.homedepot.ca/en/home/p.12-sheetrock-ultralight-drywall-gypsum-panel-4-x-12.1000149007.html')
elem = browser.find_element_by_css_selector('div.product-total-price > span')
print(elem.text)
**$14.76**
browser.quit()
我使用selenium打开浏览器以便加载价格。这将打开一个浏览器,它可能不完美,但它肯定比定价' - '更好。
您可以在此处获取硒http://www.seleniumhq.org/