我通过beautifulsoup解析了一个HTML页面,将具有特定div
名称的所有class
元素提取到一个列表中。
我现在必须清除此列表中的HTML字符串,留下我需要的字符串标记。
我开始的列表如下所示:
[<div class="info-1">\nName1a <span class="bold">Score1a</span>\n</div>, <div class="info-2">\nName1b <span class="bold">Score1b</span>\n</div>, <div class="info-1">\nName2a <span class="bold">Score2a</span>\n</div>, <div class="info-2">\nName2b <span class="bold">Score2b</span>\n</div>, <div class="info-1">\nName3a <span class="bold">Score3a</span>\n</div>, <div class="info-2">\nName3b <span class="bold">Score3b</span>\n</div>]
空白是故意的。 我需要将该列表缩减为:
[('Name1a', 'Score1a'), ('Name1b', 'Score1b'), ('Name2a', 'Score2a'), ('Name2b', 'Score2b'), ('Name3a', 'Score3a'), ('Name3b', 'Score3b')]
什么是解析像这样的子串的有效方法?
我已尝试使用split
方法(例如[item.split('<div class="info-1">\n',1) for item in string_list]
),但拆分只会导致需要进一步拆分的子字符串(因此效率低下)。同样使用replace
。
我觉得我应该走另一条路并提取我需要的令牌,但我似乎无法用优雅的方式绕过去做这件事。对此不熟悉也没有帮助。我恭维你的帮助。
答案 0 :(得分:1)
class
info
stripped_strings
获取标记tuple()
将可迭代对象转换为元组对象import bs4
html = '''<div class="info-1">\nName1a <span class="bold">Score1a</span>\n</div>, <div class="info-2">\nName1b <span class="bold">Score1b</span>\n</div>, <div class="info-1">\nName2a <span class="bold">Score2a</span>\n</div>, <div class="info-2">\nName2b <span class="bold">Score2b</span>\n</div>, <div class="info-1">\nName3a <span class="bold">Score3a</span>\n</div>, <div class="info-2">\nName3b <span class="bold">Score3b</span>\n</div>'''
soup = bs4.BeautifulSoup(html, 'lxml')
for div in soup.select('div[class^="info"]'):
t = tuple(text for text in div.stripped_strings)
print(t)
出:
('Name1a', 'Score1a')
('Name1b', 'Score1b')
('Name2a', 'Score2a')
('Name2b', 'Score2b')
('Name3a', 'Score3a')
('Name3b', 'Score3b')