首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取子字符串的Python列表处理

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

Stack Overflow用户
提问于 2017-02-11 08:53:54
回答 1查看 77关注 0票数 3

我通过漂亮汤解析了一个HTML页面,将所有具有特定class名称的class元素提取到一个列表中。

现在我必须从这个列表中清除HTML字符串,留下我需要的字符串标记。

我从下面开始的列表如下:

代码语言:javascript
复制
[<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>]

白色空间是故意的。我需要把这份清单减少到:

代码语言:javascript
复制
[('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也是如此。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-11 08:59:44

  1. 除非您真的需要这样做,否则不要将BS对象转换为字符串。
  2. 使用CSS选择器查找以class开头的info
  3. 使用stripped_strings获取标记下的所有非空字符串。
  4. 使用tuple()将可迭代的元组对象转换为元组对象
代码语言:javascript
复制
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)

退出:

代码语言:javascript
复制
('Name1a', 'Score1a')
('Name1b', 'Score1b')
('Name2a', 'Score2a')
('Name2b', 'Score2b')
('Name3a', 'Score3a')
('Name3b', 'Score3b')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42174032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档