Не удается очистить строку от нежелательных символов с помощью Python beautifulsoup

#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 для нее.