Мой код надежно очищает данные на моей машине, но не на других
Я использую 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-код такой же, и когда я тестировал свой код, вручную выписывая каждую строку на этом другом компьютере, он работал отлично. Только когда он работает внутри функции, он не работает.
Есть ли способ гарантировать, что мой код будет работать на любой машине? По каким причинам код может работать самостоятельно, но не на другом компьютере? И почему код работает, когда я тестирую его построчно, а не когда он внутри функции?
1 ответ
Я не знаю, как вы заставили его работать на вашем компьютере, но для поиска тега с несколькими классами вы должны передать его в виде списка, элементами которого являются имена интересующих вас классов.:
soup.find('span', attrs={'class':["qtyTxt", "vi-bboxrev-dsplblk", "vi-qty-fixAlignment"]})
Я подозреваю, что вы используете другую версию beautifulsoup
это позволяет вам передавать классы как одну строку (я не знаю ни одной версии, которая делает это).
Этот ответ был проверен на beautifulsoup4
версия 4.5
Это выход из pip freeze
на моей машине.
beautifulsoup4==4.5.0