Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取子字符串的Python列表处理_Python_Beautifulsoup - Fatal编程技术网

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

提取子字符串的Python列表处理,python,beautifulsoup,Python,Beautifulsoup,我通过beautifulsoup解析了一个HTML页面,将所有具有特定类名称的div元素提取到一个列表中 我现在必须从这个列表中清除HTML字符串,留下我需要的字符串标记 我开始的列表如下所示: [<div class="info-1">\nName1a <span class="bold">Score1a</span>\n</div>, <div class="info-2">\nName1b <span class

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

我现在必须从这个列表中清除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>]
像这样解析子字符串的有效方法是什么


我尝试过使用
split
方法(例如
[item.split('\n',1)for string\u list中的item]
),但拆分只会导致需要进一步拆分的子字符串(因此效率低下)。同样适用于使用
替换

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

  • 除非确实需要,否则不要将BS对象转换为字符串
  • 使用CSS选择器查找以
    info
  • 使用
    stripped_strings
    获取标记下的所有非空字符串
  • 使用
    tuple()
    将iterable转换为tuple对象


  • 这太棒了。非常感谢:-)
    [('Name1a', 'Score1a'), ('Name1b', 'Score1b'), ('Name2a', 'Score2a'), ('Name2b', 'Score2b'), ('Name3a', 'Score3a'), ('Name3b', 'Score3b')]
    
    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')