【发布时间】:2021-11-03 16:57:40
【问题描述】:
我有一些来自网络抓取表的嵌套列表,我想通过删除无用的 HTML 字符来“清理”它们。它们看起来像这样:
example_list = ['12.7x55 mm PS12B',
'<td style="border-bottom:solid 2px">102\n</td>',
'<td style="border-bottom:solid 2px">46\n</td>',
'<td style="border-bottom:solid 2px">57\n</td>',
'<td style="border-bottom:solid 2px; background-color:#00990080;">6\n</td>',
'<td style="border-bottom:solid 2px; background-color:#00640080;">5\n</td>',
'<td style="border-bottom:solid 2px; background-color:#FB9C0E80;">4\n</td>']
我希望它看起来像这样:
my_list = ['12.7x55 mm PS12B', '102', '46', '57', '6', '5', '4']
我尝试了简单的理解:
my_list[1:] = [i.replace('\n</td>', '') for i in list] # works perfectly
my_list[1:] = [i.replace('<td>', '') for i in list] # works perfectly
# for example the second item in the list is now `102`
# not `<td style="border-bottom:solid 2px">102\n</td>`
但是当我尝试使用更具体的理解来编辑最后六个元素时:
my_list[1:] = [i.replace(i, i[-1]) for i in list if "back" in i]
它删除了我刚刚提取的所有其他列表元素,我最终得到:
my_list = ['12.7x55 mm PS12B', '6', '5', '4']
我确信 HTML 有一种不那么晦涩难懂的方法来做到这一点(我希望知道这一点),但我主要担心的是我不明白简单的 python 理解是怎么回事。
【问题讨论】:
-
这是抓取的数据。你为什么不使用你的抓取库?
-
你的最后一行是错误的
my_list[4:] = [i.replace(i, i[-1]) for i in list if "back" in i]应该是你想要的。但改用beautifulsoup -
除了你应该使用像bs4 这样的库之外,你正在覆盖这些值,因为你使用了“my_list[1:]="。我不太确定你是否完全理解 python 中的切片。
-
我实际上在使用漂亮的汤,我只是无法干净地提取数字,所以我想我尝试一条更长的路线并练习使用推导式。
-
我想我尝试了我一生中最糟糕的懒惰捷径,因为解决问题 A 比创建和解决问题 B 更容易。
标签: python list compression