我通过漂亮汤解析了一个HTML页面,将所有具有特定class名称的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也是如此。
我觉得我应该走另一条路,提取我需要的代币,但我似乎不能用一种优雅的方式来做这件事。对这件事也没什么帮助。我感谢你的帮助。
发布于 2017-02-11 08:59:44
class开头的infostripped_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')https://stackoverflow.com/questions/42174032
复制相似问题