728x90
2021.11.19 - [데이터 이해하기/데이터 다루기] - [데이터 수집] 공공데이터 API - Requests, Beautiful Soup 사용하기
앞에서 작성했던 API에서 필요한 데이터를 가져오기 위해 긴 for 문과 if문을 사용했다.
data=soup.find_all('item')
con_list=[]
for item in data:
if item.find('title'):
Title=item.find('title').text
else:
Title=None
if item.find('eventstartdate'):
Sdate=item.find('eventstartdate').text
else:
Sdate=None
if item.find('eventenddate'):
Edate=item.find('eventenddate').text
else:
Edate=None
if item.find('addr1'):
Addr=item.find('addr1').text
else:
Addr=None
if item.find('mapy'):
mapY=item.find('mapy').text
if item.find('cat1'):
cat1=item.find('cat1').text
else:
cat1=None
if item.find('cat2'):
cat2=item.find('cat2').text
else:
cat2=None
if item.find('cat3'):
cat3=item.find('cat3').text
else:
cat3=None
if item.find('mapx'):
mapX=item.find('mapx').text
else:
mapX=None
con_list.append({'축제명':Title,'시작일':Sdate, '종료일':Edate,
'주소':Addr, '위도':mapY, '경도':mapX,
'cat1':cat1, 'cat2':cat2, 'cat3':cat3})
하지만, 더 간결하고 쉽게 코드를 작성할 수 있지 않을까? 라는 생각이 들었다.
고민끝에 아래의 방법으로 작성해봤다.
soup을 사용해 모든 텍스트를 가져오는 부분부터 시작
data=soup.find_all('item')
찾고자 하는 변수를 리스트로 ls에 저장하고 for문을 사용해 해당 변수를 찾는다.
ls=['title','addr1'] # 찾고자하는 데이터
con_list=[]
list=[]
for i in ls:
dt={} # 컬럼명과 내용을 딕셔너리 형태로 저장
for c in data:
if c.find(i):
dt[i] = c.find(i).text # 텍스트 데이터를 돌면서 리스트에 있는 항목을 찾는다.
else:
dt[i] = None
list.append({i:dt[i]}) # 찾은 데이터를 list에 저장한다.
list
코드를 실행하면 위와 같이 원하던 title과 addr1 데이터를 얻을 수 있었다.
'시행착오 > 코드' 카테고리의 다른 글
Media Pipe 오류 해결 (0) | 2021.11.19 |
---|