2017-12-09 1 views
0

나는 아래 스크립트 내에서 content 변수에 저장된 일부 요소 중 일부 항목을 구문 분석하기 위해 Python에서 BeautifulSoup를 사용하여 작은 스크립트를 작성했습니다. 이전에 생성 된 빈 사전에 항목을 추가하고 싶지 않습니다. 오히려, 나는 파리에서 그것을 파싱하고 싶다. 그러나, 나는 시도했지만 달성 할 수 없었다. 어떤 도움을 주시면 감사하겠습니다.파싱 된 항목을 사전으로 저장할 수 없습니다.

from bs4 import BeautifulSoup 

content=""" 
<table class="data"> 
    <tbody> 
     <tr class="blue"> 
      <td>hot</td> 
      <td>cold</td> 
     </tr> 
     <tr> 
      <td>day</td> 
      <td>night</td> 
     </tr> 
    </tbody> 
</table> 
""" 
soup = BeautifulSoup(content,'lxml') 
for items in soup.select('tr'): 
    data = [item.text for item in items.select("td")] 
    dict_val = {data[0] : data[1]} 
    print(dict_val) 

방법 I 출력 받고 있어요 :

{'hot': 'cold'} 
{'day': 'night'} 

I 출력이 기대 방법 :

{'hot': 'cold','day': 'night'} 
+0

힌트 :'dict_val'은 각 반복마다 생성 된 새 사전입니다. –

답변

2

당신은 수를

내 시도 for-loop 외부에 사전을 만듭니다.

또는, 한 줄에 사전을 만들 수 있습니다

from bs4 import BeautifulSoup as soup 
s = [i.text for i in soup(content, 'lxml').findAll('td')] 
new_s = dict([s[i:i+2] for i in range(0, len(s), 2)]) 

출력 :

{u'hot': u'cold', u'day': u'night'} 
+1

그건 사전 이해가 아닙니다. '{s [i] : s [i + 1] 범위 (0, len (s), 2)} ' –

+0

@PeterWood 최근 편집을 참조하십시오. – Ajax1234

+0

최신 버전을 실행하여 작동하는지 확인 했습니까? –

0

컴퓨터는 정확히 당신이 그것을 말하지 않는 것을 기억하십시오. 원래 코드에는 다음 줄이 있습니다.

dict_val = {data[0] : data[1]} 

이렇게하면 루프가 반복 될 때마다 새 사전이 만들어집니다. 대신에 하나의 사전을 작성하여 요소를 추가하려면,이를 수행해야합니다. 종종 단어로 단계를 작성하는 데 도움이됩니다.

create a dictionary 
for each row in the table: 
    parse the <td> elements from the row 
    add an entry to the dictionary 

대부분이 이미 Python으로 번역되었습니다. 주요 차이점은 사전이 작성되는 위치와 HTML의 데이터가 사전에 삽입되는 방법입니다. 연습으로 파이썬에서이 작업을 수행하는 방법에 대한 세부 사항을 남겨 둘 것입니다. (힌트 : 다른 대답을보십시오.) 여기서 중요한 것은 수행하려는 단계의 순서에 대해 명확하게 생각하고 다음을 파이썬에서 수행하는 방법을 알아내는 것입니다.

0

for 루프 앞에있는 사전을 초기화해야합니다. 반복 될 때마다 코드에 새 사전이 만들어집니다. dict_val = {data[0] : data[1]}. 다음 코드를 시도해 볼 수 있습니다 :

from bs4 import BeautifulSoup 

content=""" 
<table class="data"> 
    <tbody> 
     <tr class="blue"> 
      <td>hot</td> 
      <td>cold</td> 
     </tr> 
     <tr> 
      <td>day</td> 
      <td>night</td> 
     </tr> 
    </tbody> 
</table> 
""" 
soup = BeautifulSoup(content,'lxml') 
dict_val = {} 
for items in soup.select('tr'): 
    data = [item.text for item in items.select("td")] 
    dict_val[data[0]] = data[1] 
print(dict_val) 
관련 문제