2016-12-29 47 views
1

我使用Python 2.7版和美麗的湯的4.5.1版本使用Python中美麗的湯來檢查產品的在線

我在我無計可施試圖使這個非常簡單的腳本工作的有效性。我的目標是在

<div class="status online-availability-status">    Sold out online  </div> 

分析該產品的頁面的html和提取信息以獲得對百思買的網站上NES主機的在線可用性狀態的信息,這是一個用美麗的湯我第一次模塊,所以如果我錯過了某些明顯的東西,請原諒我。這是我寫的嘗試獲得上述信息的腳本:

import requests 
from bs4 import BeautifulSoup 

page = requests.get('http://www.bestbuy.ca/en-CA/product/nintendo-nintendo-entertainment-system-nes-classic-edition-console-clvsnesa/10488665.aspx?path=922de2a5ceb066b0f058cc567ad3d547en02') 

soup = BeautifulSoup(page.content, 'html.parser') 

avail = soup.findAll('div', {"class": "status online-availability-status"}) 

但我只是得到一個空列表avail。任何想法爲什麼?

任何幫助,非常感謝。

+0

是否確定你得到的頁面,它包含所需的div? – Nurjan

+0

可能與頁面加載方式有關:嘗試手動加載它會首先顯示進度條,而頁面執行後臺查詢來檢查庫存,然後顯示「在線售罄」。這意味着當原始頁面加載時,該內容不存在。 – VBB

+0

@Nurzhan是的,我確定。我正在查看頁面的元素,並且它在那裏。 – PollPenn

回答

1

正如上面的評論表明,你似乎正在尋找一個由JavaScript生成的客戶端標籤;它會在加載的頁面上使用「檢查」顯示,但在查看頁面源時不會顯示,這是對請求的調用正在退回。您可以嘗試使用dryscrape(您可能需要使用pip install dryscrape進行安裝)。

import dryscrape 
from bs4 import BeautifulSoup 
session = dryscrape.Session() 
url = 'http://www.bestbuy.ca/en-CA/product/nintendo-nintendo-entertainment-system-nes-classic-edition-console-clvsnesa/10488665.aspx?path=922de2a5ceb066b0f058cc567ad3d547en02' 
session.visit(url) 
response = session.body() 
soup = BeautifulSoup(response) 
avail = soup.findAll('div', {"class": "status online-availability-status"}) 

這是在與動態刮問題的最流行的解決方案生成的內容:

Web-scraping JavaScript page with Python

0

狀況裝入JSON。你甚至不需要爲此解析HTML:

import urllib 
import simplejson 

sku = 1048865 # look at the URL of the web page, it is <blablah>//10488665.aspx 
# chnage locations to get the right store 
response = urllib.urlopen('http://api.bestbuy.ca/availability/products?callback=apiAvailability&accept-language=en&skus=%s&accept=application%2Fvnd.bestbuy.standardproduct.v1%2Bjson&postalCode=M5G2C3&locations=977%7C203%7C931%7C62%7C617&maxlos=3'%sku) 
availability = simplejson.loads(response.read()) 
print availability[0]['shipping']['status'] 
+0

感謝您的支持。這是否檢查商店的可用性?我特別關注在線可用性。 – PollPenn

+0

@PollPenn是的,它確實如此 – Marat