提取子字符串的Python列表处理

2024-04-25 08:44:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过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也是如此。你知道吗

我觉得我应该走另一条路,提取我需要的代币,但我似乎不能用一种优雅的方式来做这件事。对这件事不熟悉也没什么帮助。我感谢你的帮助。你知道吗


Tags: 方法字符串divinfo列表htmlclassspan
1条回答
网友
1楼 · 发布于 2024-04-25 08:44:52
  1. 除非确实需要,否则不要将BS对象转换为字符串。你知道吗
  2. 使用CSS选择器查找以info开头的class
  3. 使用stripped_strings获取标记下的所有非空字符串
  4. 使用tuple()将iterable转换为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')

相关问题 更多 >