【问题标题】:parsing a list of strings based on values in the string根据字符串中的值解析字符串列表
【发布时间】:2021-03-19 09:47:55
【问题描述】:

我从网站上抓取数据并使用以下代码将结果输出到列表中,以使用 beautifulsoup 和 requests 获得以下输出:

['1\n',
 ' Saul Alvarez*',
 '1545\n',
 '\n\n',
 '  middle\n',
 '  30\n',
 ' 53\xa01\xa02\n',
 ' \n',
 'orthodox\n',
 'Guadalajara, Mexico',
 '2\n',
 ' Tyson Fury',
 '1030\n',
 '\n\n',
 '  heavy\n',
 '  32\n',
 ' 30\xa00\xa01\n',
 ' \n',
 'orthodox\n',
 'Wilmslow, United Kingdom',
 '3\n',
 ' Errol Spence Jr',
 '697.2\n',
 '\n\n',
 '  welter\n',
 '  30\n',
 ' 27\xa00\xa00\n',
 ' \n',
 'southpaw\n',
 'Desoto, USA',
 '4\n',
 ' Terence Crawford',
 '658.9\n',
 '\n\n',
 '  welter\n',
...

我在解析这个列表时遇到了困难,只要有一个整数 + '\n'。 所以理想情况下,我希望输出是列表列表:

[[
'1\n',
 ' Saul Alvarez*',
 '1545\n',
 '\n\n',
 '  middle\n',
 '  30\n',
 ' 53\xa01\xa02\n',
 ' \n',
 'orthodox\n',
 'Guadalajara, Mexico'
],
['2\n',
 ' Tyson Fury',
 '1030\n',
 '\n\n',
 '  heavy\n',
 '  32\n',
 ' 30\xa00\xa01\n',
 ' \n',
 'orthodox\n',
 'Wilmslow, United Kingdom']
['3\n',
 ' Errol Spence Jr',
 '697.2\n',
 '\n\n',
 '  welter\n',
 '  30\n',
 ' 27\xa00\xa00\n',
 ' \n',
 'southpaw\n',
 'Desoto, USA'],
...]

【问题讨论】:

  • 所以您的意思是,您希望将您的列表转换为第二列表?或者请澄清或者您确定每个子列表的长度都相同,即 9?

标签: python arrays string


【解决方案1】:

嗯,有两件事情发生了,我只说第一件。

您可以删除空格和'\n',因为它们是换行符,即换行符。


li = ['1\n',
 ' Saul Alvarez*',
 '1545\n',
 '\n\n',
 '  middle\n',
 '  30\n',
 ' 53\xa01\xa02\n',
 ' \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', '53\xa01\xa02']

第二个问题,我不会在这里解决,因为我们不知道您没有给出的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多