@dasha1996

Как объект с типом 'list' отображаемый в виде столбца преобразовать в строку?

При парсинге получаю данные в таком виде
C:\парсер\venv\Scripts\python.exe C:/парсер/main.py 
list index out of range <tr>
<th><strong>№</strong></th>
<th><strong>Исход</strong></th>
<th><strong>Результат</strong></th>
</tr>
['1']
['X']
['1']
['1']
['2']
['2']
['X']
['1']
['X']
['2']
['1']
['2']
['2']
['X']
['2']

Мне необходимо эти данные преобразовать в одну строку, с пробелом в качестве разделителя. Пробовала использовать map() для приведения всех элементов списка к строке, а потом просто склеить их в одну строку методом join(), но ничего не выходит.
Вот весь код на всякий случай
import requests
from bs4 import BeautifulSoup
from lxml import html
import csv

headers = {'Accept': 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.63'}
url = 'https://old.baltbet.ru/BetInfoSE.aspx?id=688978285'

response = requests.get(url, headers=headers)

file = open('data.csv','w')
writer = csv.writer(file)

soup = BeautifulSoup(response.text, 'html.parser')
rows = soup.find('table',class_ ='betinfo2').find_all('tr')
for row in rows:
    columns = row.find_all('td')
    try:
        data_list = [columns[1].text]
        print(data_list)

    except Exception as e:
        print (e,row)
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
DedIsDead
@DedIsDead
Всё просто
listtest=['1','2','3']
res="".join(listtest)
print(res)
Ответ написан
@PavelMos
Возможно из-за того, что join делает строку из одномерного списка. А если к выходному списку ты добавляешь результат data_list, то получается уже двумерный список, так как выражение с квадратными скобками data_list = [columns[1].text] само создает список (из одного элемента).
FIX FIX FIX FIX
то есть spisok1.append('1') это одно, а spisok1.append('[1]') это другое. То есть какой будет в результате список зависит от того, какого типа элементы добавляются и как. Список списков [['X'],[1],[2]] просто через join он в строку не развернётся.

Соответственно, проще всего
data_list=[]
... тут цикл...
data_list += columns[1].text #это эквивалентно data_list.extend(columns[1].text)

и потом сделать " ".join...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы