#python #python-3.x #web-scraping #beautifulsoup
#python #python-3.x #очистка веб-страниц #beautifulsoup
Вопрос:
Когда я запускаю следующее
prices = [price.text.strip() for price in soup.select('.special-price')]
prices = prices.replace(u'xa0', u' ')
print(prices)
Я получаю объект ‘list’, у которого нет атрибута ‘replace’
Куда я должен поместить замену? есть ли какой-либо способ очистить ее за один шаг?
Спасибо
Комментарии:
1. Поскольку объект ‘list’ не имеет атрибута ‘replace’
2. @Dirty Очевидно, да, но.. где и как?
3. Пробовал
prices = [price.replace(u'xa0', u' ') for price in prices]
?4. Тогда просто сделайте это с самого начала:
prices = [price.text.strip().replace(u'xa0', u' ') for price in soup.select('.special-price')]
. Хотя я не уверен, почему вы получаете эту ошибку.5. Все методы
.text
and.strip
и.replace
будут выполняться на каждой итерации. Приоритет такой, как написано — сначала.text
, затем.strip
, затем.replace
.
Ответ №1:
Поскольку у нас нет доступа к вашим образцам данных, это должно сделать:
Вам нужно поставить replace()
на str
не list
, Как:
prices = ['1','1','2','3','4','5','1','1','1']
print([x.replace('1', '9') for x in prices])
ВЫВОД:
['9', '9', '2', '3', '4', '5', '9', '9', '9']
Ответ №2:
Потому что 'list' object has no attribute 'replace'
. Вот почему.
Вы пытаетесь изменить цены индивидуально. Строка имеет replace
метод, а список — нет.
Вам следует добавить replace в свой список понимания.
prices = [price.text.strip().replace(u'xa0', u' ') for price in soup.select('.special-price')]
print(prices)
Ответ №3:
Да, потому что вы создали список с пониманием списка
Вам нужно преобразовать список в строку, prices=''.join(prices)
предполагая, что prices — это список строк, если не разобрать его в строку. Тогда цены будут строкой. Теперь вы можете вызвать replace для нее.