непроходимый тип: ошибка 'slice' при удалении символов из списка значений в Python? - PullRequest
0 голосов
/ 02 июня 2018

У меня есть список значений, извлеченных с веб-сайта с использованием BeautifulSoup.Это выглядит так:

tables_values1 = soup.find_all('td',attrs={'class':'x1'})
print(tables_values1)

Вывод: [123value1,123value2, "123value3] (Обратите внимание, что не было" или ')

Я пытаюсь вырезать первые x символов, используяследующее (которое я также нашел в stackexchange):

tables_values = [x[2:] for x in tables_values1]

Однако, это возвращает:

Ошибка типа: unhashable type: 'slice'

Может кто-нибудь помочь разобраться, почему это происходит и как это исправить?Большое спасибо!

Редактировать: Пожалуйста, дайте мне знать, если это правильный список сейчас!

Редактировать 3: Печать точного repr, как указано ниже:

[<td class="views-field views-field-field-category-value-2018">136          </td>, <td class="views-field views-field-field-category-value-2018">SFD          </td>, <td class="views-field views-field-field-category-value-2018">136          </td>, <td class="views-field views-field-field-category-value-2018">$33,657,146           </td>, <td class="views-field views-field-field-category-value-2018">9.7          </td>, <td class="views-field views-field-field-category-value-2018">$33,657,146           </td>, <td class="views-field views-field-field-category-value-2018">61          </td>, <td class="views-field views-field-field-category-value-2018">34          </td>, <td class="views-field views-field-field-category-value-2018">5          </td>, <td class="views-field views-field-field-category-value-2018">61          </td>, <td class="views-field views-field-field-category-value-2018">34          </td>, <td class="views-field views-field-field-category-value-2018">5          </td>, <td class="views-field views-field-field-category-value-2018">5          </td>, <td class="views-field views-field-field-category-value-2018">95          </td>]
<td class="views-field views-field-field-category-value-2018">136          </td>

1 Ответ

0 голосов
/ 02 июня 2018

Это объекты тегов BeautifulSoup в вашем списке, а не строки.Вы пытаетесь нарезать их, как если бы они были струнами.Вы действительно должны работать с ними как теги вместо того, чтобы пытаться манипулировать строками;например, если вы пытаетесь получить текст между тегами, это будет

contents = [x.string for x in tables_values1]

, где атрибут string является помощником для получения однострочного дочернего элементатег, если он есть.


Если вы действительно хотите выполнять свою задачу с помощью манипуляции со строками, а не через интерфейс BeautifulSoup, вы можете преобразовать объекты тега в строки, включая <td class="..."></td>part:

strings = [str(x) for x in tables_values1]

Затем вы можете нарезать струны сколько хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...