2016-09-21 46 views
0

我使用Ubuntu 16.04,並且我創建了一個代碼,該代碼接收eBay鏈接並刪除銷售產品的單位數量(如果信息可用)。我的版本看起來像這樣:我的代碼在我的機器上可靠地擦除了數據,但不是其他人

import requests 
from bs4 import BeautifulSoup 

def sold(url): 
    soup = BeautifulSoup(requests.get(url).text, 'html.parser') 
    amount_sold = soup.find('span', attrs={'class':"qtyTxt vi-bboxrev-dsplblk vi-qty-fixAlignment"}) 
    if amount_sold: 
    amount_sold = amount_sold.find('a') 
    amount_sold = amount_sold.get_text().replace(u',', u'')[:-5] 
    else: 
    amount_sold = "N/A" 

當我在我的機器上使用此功能時,它在每次可用時都可靠地擦除數據。例如,對於此頁面:http://www.ebay.com/itm/13-lighted-led-bat-halloween-window-silhouette-decoration/311651989599?hash=item488fe7f85f,它將可靠地返回53(在撰寫本文時)。然而,當我在另一臺機器上(在另一臺機器上,我嘗試過Windows,Cygwin,甚至是外部Ubuntu服務器)嘗試這段代碼時,我的函數返回「N/A」,因爲我的amount_sold變量根本找不到任何東西。我進入頁面以確保html代碼是相同的,當我通過手動寫出其他機器上的每一行來測試我的代碼時,它完美地工作。只有當它在一個函數中運行時,它纔會失效。

有沒有辦法確保我的代碼可以在任何機器上工作?代碼可以獨立工作,但不在其他機器上的原因是什麼?爲什麼代碼在逐行測試時工作,而不是在函數內部測試?

+0

爲什麼不使用ebay API呢? – frlan

回答

0

我不知道你是如何在你的機器上工作的,但是爲了搜索一個帶有多個類的標籤,你應該把它作爲一個列表傳入,其元素是你感興趣的類的名字在這樣的:

soup.find('span', attrs={'class':["qtyTxt", "vi-bboxrev-dsplblk", "vi-qty-fixAlignment"]}) 

我懷疑你使用的是不同版本的beautifulsoup,使您可以在類作爲一個字符串傳遞(我不知道的,做任何版本)。

這個答案是對beautifulsoup4版本4.5

測試,這是pip freeze我的機器上輸出。

beautifulsoup4==4.5.0

+0

請分享您使用的美麗珠版本 – danidee

+0

如何查看我使用的版本? –

+0

@FedericoScivittaro'import bs4;打印(bs4 .__ version __)' – MattDMo

相關問題