список() в одной строке, не может вводить /новые строки

#list #beautifulsoup #scrape

Вопрос:

как проект, в котором я кодирую веб-сайт со статистикой определенных монстров из игры, проблема в том, что, когда я добавляю данные в список, они печатаются в виде очень длинной одной строки. Я уже пробовал .добавить(clean_data.getText().заменить(‘n’, «\n»)). Следует учитывать, что если я не использую .getText (), я добавляю в список много тегов [td] и [tr], и это становится очень запутанным. Я думаю, что проблема здесь в том, что текст, который я получаю, обрабатывается как обычный текст, поэтому, когда я заменяю n на \n, он заменяется непосредственно как \n, как будто он не распознает \n.

Мой код:

 import requests
import pandas as pd
from bs4 import BeautifulSoup
import csv

url = 'https://guildstats.eu/monsters?world=Yonabra'

page = requests.get(url)

soup = BeautifulSoup(page.content, 'html.parser')

monsters = ('adult goannas', 'young goannas', 'manticores', 'feral sphinxes', 'ogre ruffians', 'ogre rowdies', 'ogre sages', 'dogs')
finding_td = soup.find_all('td', string=monsters)
list_of_monsters = []
for looking_for_parent in finding_td:
    parent_tr = looking_for_parent.find_parents('tr')
    for clean_data in parent_tr:

        list_of_monsters.append(clean_data.getText().replace('n', " "))

print(list_of_monsters)
 

Это дает следующий результат:

 [' 7 adult goannas  2020-05-28 1519 0 736893 133 ', ' 222 dogs  2020-05-27 143 0 40043 0 ', ' 298 feral sphinxes  2020-05-28 1158 1 480598 152 ', ' 498 manticores  2020-05-28 961 1 299491 68 ', ' 581 ogre rowdies  2020-05-28 306 0 188324 13 ', ' 582 ogre ruffians  2020-05-29 217 0 121964 7 ', ' 583 ogre sages  2020-05-28 156 0 63489 8 ', ' 911 young goannas  2020-05-28 1880 0 972217 74 ']
 

я хочу, чтобы это было больше похоже на это:

 [' 7 adult goannas  2020-05-28 1519 0 736893 133 '
' 222 dogs  2020-05-27 143 0 40043 0 '
' 298 feral sphinxes  2020-05-28 1158 1 480598 152 '
' 498 manticores  2020-05-28 961 1 299491 68 '
' 581 ogre rowdies  2020-05-28 306 0 188324 13 '
' 582 ogre ruffians  2020-05-29 217 0 121964 7 '
' 583 ogre sages  2020-05-28 156 0 63489 8 '
' 911 young goannas  2020-05-28 1880 0 972217 74 ']
 

Комментарии:

1. pprint(list_of_monsters) после from pprint import pprint . Кроме того, вы получаете хороший вывод только pd.read_html('https://guildstats.eu/monsters?world=Yonabra')[0] после import pandas as pd того, как сможете удалить все ненужные столбцы из возвращенного df

Ответ №1:

Что вы хотите , так это изменить разделитель для массива — вместо , этого вам нужна новая строка. Как упоминал @QHarr, вы можете использовать python pprint для печати результатов в лучшем формате.

Попробуй:

 import requests
import pandas as pd
from bs4 import BeautifulSoup
import csv
from pprint import pprint
url = 'https://guildstats.eu/monsters?world=Yonabra'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
monsters = ('adult goannas', 'young goannas', 'manticores', 'feral sphinxes', 'ogre ruffians', 'ogre rowdies', 'ogre sages', 'dogs')
finding_td = soup.find_all('td', string=monsters)
list_of_monsters = []
for looking_for_parent in finding_td:
    parent_tr = looking_for_parent.find_parents('tr')
    for clean_data in parent_tr:
        list_of_monsters.append(clean_data.getText().replace("n", " "))
pprint(list_of_monsters)
 

Это дает:

 [' 7 adult goannas  2020-05-28 1519 0 736893 133 ',
 ' 222 dogs  2020-05-27 143 0 40043 0 ',
 ' 298 feral sphinxes  2020-05-28 1158 1 480598 152 ',
 ' 498 manticores  2020-05-28 961 1 299491 68 ',
 ' 581 ogre rowdies  2020-05-28 306 0 188324 13 ',
 ' 582 ogre ruffians  2020-05-29 217 0 121964 7 ',
 ' 583 ogre sages  2020-05-28 156 0 63489 8 ',
 ' 911 young goannas  2020-05-28 1880 0 972217 74 ']
 

n Символы, которые вы получили, уже являются символами новой строки. В python нет необходимости добавлять дополнительный escape-символ. Как вы уже пробовали, replace("n", " ") уже дает вам желаемый replace эффект. Кроме того, поскольку вы печатаете массив, даже если элемент заканчивается новой строкой, он все равно будет напечатан как n . pprint не окажет никакого влияния на исходный массив, только распечатает его в лучшем формате.