使用Python

时间:2017-11-28 21:36:16

标签: python html string beautifulsoup

我一直试图删除不必要的字符串部分而且我遇到了困难。我确信这很简单,但我可能缺乏搜索有效解决方案的术语。

我拥有所需的所有信息,现在正在尝试创建一个干净的输出。我正在使用此代码...

for each in soup.findAll('div', attrs={'class': 'className'}):
    print(each.text.split('\n'))

输出,数字和带有可变空格的文本的混合,类似于......

['', '', '', '                    1                ', '  Text Example', '                        (4)']

我需要制作的是像......这样的列表。

['1', 'Text Example', '(4)']

甚至可能从数字4中删除括号“()”。

感谢。

1 个答案:

答案 0 :(得分:2)

clean = []
for each in soup.findAll('div', attrs={'class': 'className'}):
    clean.append([s.strip() for s in each.text.strip() if s.strip()])
print(clean)

应该这样做,完整的代码,我把它放在哪里......

更新

由于存在关于效率低下的评论,出于好奇,我在py3上对双条带与嵌套列表进行了定时。当人们说它最适合描述时,似乎有些东西落后......

%timeit [s.strip() for s in l if s.strip()]
1.83 µs ± 21.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%timeit [i for i in (s.strip() for s in l) if i]
2.16 µs ± 24.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

随着数据量的增加,结果与往常有点不同......

%timeit [s.strip() for s in l*1000 if s.strip()]
1.57 ms ± 85.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit [i for i in (s.strip() for s in l*1000) if i]
1.45 ms ± 16.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)