#python #arrays #string
#python #массивы #строка
Вопрос:
Я собрал данные с веб-сайта и вывел результаты в виде списка, используя следующий код, чтобы получить следующий результат, используя beautifulsoup и запросы:
['1n',
' Saul Alvarez*',
'1545n',
'nn',
' middlen',
' 30n',
' 53xa01xa02n',
' n',
'orthodoxn',
'Guadalajara, Mexico',
'2n',
' Tyson Fury',
'1030n',
'nn',
' heavyn',
' 32n',
' 30xa00xa01n',
' n',
'orthodoxn',
'Wilmslow, United Kingdom',
'3n',
' Errol Spence Jr',
'697.2n',
'nn',
' weltern',
' 30n',
' 27xa00xa00n',
' n',
'southpawn',
'Desoto, USA',
'4n',
' Terence Crawford',
'658.9n',
'nn',
' weltern',
...
У меня возникают трудности с анализом этого списка везде, где есть целое число ‘n’ .
Поэтому в идеале я хотел бы, чтобы результат представлял собой список списков :
[[
'1n',
' Saul Alvarez*',
'1545n',
'nn',
' middlen',
' 30n',
' 53xa01xa02n',
' n',
'orthodoxn',
'Guadalajara, Mexico'
],
['2n',
' Tyson Fury',
'1030n',
'nn',
' heavyn',
' 32n',
' 30xa00xa01n',
' n',
'orthodoxn',
'Wilmslow, United Kingdom']
['3n',
' Errol Spence Jr',
'697.2n',
'nn',
' weltern',
' 30n',
' 27xa00xa00n',
' n',
'southpawn',
'Desoto, USA'],
...]
Комментарии:
1. то есть вы имели в виду, что хотите, чтобы ваш первый список был преобразован во второй список? или, пожалуйста, уточните, или вы уверены, что каждый подсписок будет иметь одинаковую длину, равную 9?
Ответ №1:
Что ж, есть 2 вещи, которые происходят, и я остановлюсь только на первой.
Вы можете отбросить пробелы и 'n'
потому, что это символы новой строки, то есть переводы строк.
li = ['1n',
' Saul Alvarez*',
'1545n',
'nn',
' middlen',
' 30n',
' 53xa01xa02n',
' n',
]
li = [val.replace(r"n","") for val in li]
li = [val.strip() for val in li if val.strip()]
print(li)
Это выводит:
['1', 'Saul Alvarez*', '1545', 'middle', '30', '53xa01xa02']
Вторая проблема, которую я не буду здесь рассматривать, поскольку мы не знаем формат html, который вы не указали, заключается в том, что вы захватываете все значения элементов (текст в каждом теге), не глядя на структуру HTML-разметки. Это неправильный подход.
Я предполагаю, что если вы посмотрите на источник страницы, вы можете найти что-то вроде <div class="name">Saul Alvarez</div><div class="weightclass">middle</div>
. Использование аннотации разметки и семантического контекста более продуктивно, чем пытаться угадать структуру из приведенного выше списка с 6 элементами. BeautifulSoup может сделать это, попробовав использовать soup.select("div.name")
, например.
Хорошая вещь, с soup.select
помощью которой используются селекторы CSS, заключается в том, что вы можете предварительно протестировать свой запрос в инструментах разработки вашего браузера.
Просто помните, soup.select
что вернет список html-элементов, из которых вы захотите просмотреть value
.