2017-09-28 1 views
1

아래 코드는 다음과 같습니다.이 코드에서 얻은 루프 결과를 목록으로 변환하려고합니다. 어떤 아이디어?루프를 목록으로 변환하기 파이썬

import requests 
from bs4 import BeautifulSoup 

page = requests.get('http://forecast.weather.gov/MapClick.php?lat=37.7772&lon=-122.4168') 

soup = BeautifulSoup(page.text, 'html.parser') 

for x in soup.find_all(class_='tombstone-container'): 
    y = (x.get_text()) 
    print (y) 
+1

'아이디어가 있습니까?'- 주어진 예제를 연습하면서 [튜토리얼] (https://docs.python.org/3/tutorial/index.html)을 통해 작업하십시오. 그 과정에서 표준 라이브러리 문서를 읽는 것. 이렇게하면 Python이 문제를 해결하는 데 도움이되는 도구에 대한 일반적인 지식을 얻게되며, 진행 방법에 대한 아이디어를 얻는 데 도움이 될 것입니다. – wwii

답변

2

그냥 반복하면됩니다.

map(lambda x: x.get_text(), soup.find_all(class_='tombstone-container')) 
+0

코드가 Python 3에서 실행되는 경우 결과는 목록이 아닙니다. – Matthias

+0

@Matthias 예, 슬프게도. – hspandher

2

목록에 for 루프의 결과를 변환하는 간단한 방법은 지능형리스트입니다.

우리는 변환 할 수 있습니다

for x in soup.find_all(class_='tombstone-container'): 
    y = (x.get_text()) 
    print (y) 

로 :

result = [x.get_text() for x in soup.find_all(class_='tombstone-container')] 

기본 (지능형리스트는 고급 구문) 문법으로 있습니다

[<expr> for <var> in <iterable>] 

는이 목록 어디 구축 Python은 <iterable>을 반복하고 <var>에 값을 할당합니다. 모든 <var> in <iterable>에 대해 <expr>의 결과를 목록에 추가합니다.

3

이 같은 내용 추가, 코드의 많은 변경이

myList = [] 

같은 당신의 루프에서 루프 전에 빈 목록을 작성하지 않으려면 :

myList.append(str(x.get_text())) # EDIT2 

을 EDIT1 : myList[len(myList)] 또는 이와 비슷한 값 대신 위의 myList.append(...)을 사용한 이유는 append 메서드를 사용하여 새로운 콘텐츠로 기존 목록을 확장해야하기 때문입니다.

EDIT2 : 목록에 없음 포인터 문제에 관한 : 루프에 대한 후 인쇄 할 때 목록이 [None, None, ...]처럼 보인다면, 당신은 여전히 ​​문자열 목록을 가지고 지금 확인하고 있습니다 그들은 단어가 포함 된 없음 (예 : ['None','None',...]). 이것은 x.get_text() 메서드가 문자열을 반환하지 않았지만 처음부터 None 포인터를 반환했음을 의미합니다. 다른 말로하면, 당신의 실수는 다른 곳에 묻혀있을 것입니다.

완전한 예제는 다음과 같습니다.

myList = [] 
for x in soup.find_all(class_='tombstone-container'): 
    # do stuff, but make sure the content of x isn't modified 
    myList.append(str(x.get_text())) 
    # do stuff 
+0

이 검색 결과는 없음, 없음, 없음 .... –

관련 문제