如何将此字符串拆分为单个字符?

时间:2017-12-16 13:43:57

标签: python web-scraping beautifulsoup

在BeautifulSoup对象中使用此html代码部分......

<span class="Example1" data-test-selector="RC1">
 507
        <b>
         3
        </b>
        <b>
         3
        </b>
        <b>
         2
        </b>
</span>

我使用此代码将其拆分......

hList = []
for each in soup.find_all('span', {'class': 'Example1'}):
    hList.append(each.text.split())

print(hList)

我得到结果......

['507', '3', '3', '2']

当我真正想要......

['5', '0', '7', '3', '3', '2']

我试图分开&#39; 507&#39;使用各种列表推导,嵌套方法等。我只是无法解决这个问题。

3 个答案:

答案 0 :(得分:5)

将列表中的字符串加入单个字符串,然后在该字符串上调用list()

>>> hList = ['507', '3', '3', '2']
>>> list(''.join(hList))
['5', '0', '7', '3', '3', '2']

您的代码实际构建了一个列表列表,因此您需要在应用str.join()之前展平列表。这可以通过列表理解来创建hList

>>> hList = [s for each in soup.find_all('span', {'class': 'Example1'})
                for s in each.text.split()]
>>> list(''.join(hList))
['5', '0', '7', '3', '3', '2']

答案 1 :(得分:4)

  

注意:您可能会获得结果[['507', '3', '3', '2']]而不是['507', '3', '3', '2'],因为findall只找到一个元素,然后将其拆分并附加。

使用each.text.split()获取字符串列表。字符串是可迭代的字符串(1个字符的字符串,是字符串的字符)。通过使用.extend(..)展平 each.text.split()的结果,我们可以将每个字符分别添加到列表中:

hList = []
for each in soup.find_all('span', {'class': 'Example1'}):
    hList.extend([c for cs in each.text.split() for c in cs])

print(hList)

或者我们将其转换为完整的列表理解:

hList = [c for each in soup.find_all('span', {'class': 'Example1'})
           for cs in each.text.split()
           for c in cs]

print(hList)

答案 2 :(得分:1)

另一种方式可能如下所示:

from bs4 import BeautifulSoup

content='''
<span class="Example1" data-test-selector="RC1">
    507
    <b>
     3
    </b>
    <b>
     3
    </b>
    <b>
     2
    </b>
</span>
'''
soup = BeautifulSoup(content,'lxml')
for items in soup.select('.Example1'):
    data = ' '.join([item for item in items.text])
    print(data.split())

输出:

['5', '0', '7', '3', '3', '2']