2017-12-16 1 views
3

...이 문자열을 개별 문자로 분할하는 방법은 무엇입니까? 나는 그것을 분할이 코드를 사용 해요 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'] 

필자는 모든 방법으로 목록 내장, 중첩 된 방법 등을 사용하여 '507'을 분리하려고 시도했습니다.이 중 하나만 이해할 수 없습니다.

+0

내가 ['당신이 결과로 얻을 생각 [ '507', '3', '3', '2']]'(그래서 두 개의 괄호). –

답변

4

다음 findall은 단 하나 개의 요소를 발견하기 때문에 당신은 아마 결과 [['507', '3', '3', '2']] 대신 ['507', '3', '3', '2']로 취득하고 당신이 그것을 분할하고 추가합니다.

each.text.split()을 사용하면 문자열 목록을 얻을 수 있습니다. 문자열은 반복 가능한 문자열입니다 (문자열의 문자 인 1 문자 문자열).

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)

을 아니면 전체 목록 이해로 변환 : 대신 .extend(..)를 사용하여에게 each.text.split()의 결과를 평평하게, 우리는 목록에 별도로 모든 문자를 추가 할 수 있습니다

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

print(hList)
+0

필자는 실제로 예제를 간략화하고 단 하나의 HTML 섹션만을 제공했습니다. 그 중 많은 섹션이 있습니다. 그래서 제 경우에는 확장 목록 대신에 * append *를 사용하여 목록 목록을 만듭니다. 어느 쪽이든, 당신은 내 문제를 해결했습니다. 고맙습니다. –

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'] 
+0

당신은 저에게 당신이 대단히 고맙다고 생각하는 새로운 방법을 가르쳐 왔습니다. –

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'] 
관련 문제