list - list() 在一行中,不能引入 /newlines
问题描述
作为一个即时编码项目,通过网络抓取一个网站,其中包含游戏中某些怪物的统计数据,问题是当我将数据附加到列表时,它会以很长的单行形式打印出来。我已经尝试过.append(clean_data.getText().replace('\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 ']
解决方案
您想要的是更改数组的分隔符 - 而不是,
,您想要一个新行。正如@QHarr 提到的,您可以使用pythonpprint
以更好的格式打印结果。
尝试:
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 中添加额外的转义字符。正如你所尝试的,replace("\n", " ")
已经给你想要的replace
效果。此外,由于您正在打印一个数组,即使元素以新行结尾,它仍将打印为\n
. pprint
不会对原始数组产生任何影响,只会以更好的格式打印。
推荐阅读
- testing - 可执行路径关键字对我不起作用
- sql - 在不知道属性的情况下检测两个表之间的更改的 SQL 代码
- wpf - 带有 Prebuild 事件的 Devops Pipeline 项目
- javascript - React Router Dom 嵌套路由,或者如何传递一个 slug
- asp.net - What is the difference between IIS &Aspnet Containers?
- regex - 排除某些字符串的正则表达式(在 vscode 中使用 find)
- javascript - 使用 const 替换数组中的元素值并让反应
- javascript - 反应 | 网页包 | 在 Azure 上获取 process.env.NODE_ENV== undefined
- java - 如何使用 orderByChild() 从 Firebase 数据库索引查询
- heroku - Heroku中爱好的测功机时间