728x90
나~와~쨔~~~~
https://sogogi1000inbun.tistory.com/146
지난 시간에는 농가 정보와 작기 정보를 크롤링하는 시간을 가졌다. 이번 시간에는 생육정보(딸기)를 크롤링 할 거다.
쟈아~ 가자!!!!!!!
1. 필요한 데이터 구조 생각해보기
이라고 할뻔 하하하하하핳 장난이에요 ㅎㅎ
- 농가 정보의 경우 일차원적인 리스트에 담겨서 오기 때문에 고려할 필요 없음
- 작기 정보는 농가 ID를 바탕으로 수집됨
- 농가마다 여러개의 리스트가 나올 수도 있고, 하나의 리스트만 나올 수도 있기 때문에 따로따로 수집해서 메모리 소비하는 것보다 그때그때 바로 받아오는 것이 베스트임
2. 코딩 시작
2-1. 농가 id 가져오기
# 농가 id 값 가져오기
import pandas as pd
farmInfo = pd.read_csv('farmInfo.csv', encoding="euc-kr")
userID = farmInfo['userId'].values # 넘파이 배열
userID = userID.tolist() # 넘파이 배열=> 리스트
# nan 값 제외
def removeNan(L):
newL = []
for l in L:
if str(l)!="nan": newL.append(l)
return newL
userIDL = removeNan(userID) # 농가 정보
2-2. 크롤링 메인
# 크롤링 메인
import requests
import json
from tqdm import tqdm
farm_url = "http://www.smartfarmkorea.net/Agree_WS/webservices/ProvideRestService/getCroppingSeasonDataList/{서비스키}/" # 작기정보 url + 서비스키
ddargi_url = "http://www.smartfarmkorea.net/Agree_WS/webservices/ProvideRestService/getStrbCultivateDataList/{서비스키}/" # 생육정보 url + 서비스키
for userID in tqdm(userIDL): # 총 892개
crop_infoL = getCropNumber(userID) # 해당 농가의 작물 번호리스트 받아오기
for cropNum in crop_infoL:
# 링크 유효성 검증
try:
ddargi_info = requests.get(ddargi_url+userID+"/"+str(cropNum)+"/2015-09-05/2022-09-04").json()
except:
continue
ddargi_df = getData(ddargi_info) # 데이터 프레임 형식으로 받아옴
saveData2(ddargi_df) # 저장
2-3. 작물 번호 가져오기(함수)
# 작물 번호 가져오기
import requests
def getCropNumber(userID):
crop_info_list = requests.get(farm_url+userID).json() # 리스트로 저장 됨 - [{}]
crop_infoL = []
for i in crop_info_list:
# print(len(i))
crop_infoL.append(i['croppingSerlNo'])
return crop_infoL
2-4. 딸기 생육 정보 가져오기(한수)
# 딸기 생육정보 가져오기
import requests
import pandas as pd
def getData(ddargi_info):
dic = dict()
# 데이터 프레임으로 합치기
for ddargi in ddargi_info: # ddargi_info = 리스트
for d in ddargi: # ddargi = 딕셔너리, d=key값
if d not in dic: # 키값이 딕셔너리 안에 없으면
dic[d]=[ddargi[d]]
else:
dic[d].append(ddargi[d])
# 딕셔너리=> 데이터 프레임
ddargi_df = pd.DataFrame(dic)
return ddargi_df
2-5. 데이터 저장(두수)
# 데이터 저장2
import csv
import os.path
file_path = "딸기생육정보test1.csv"
def saveData2(ddargi_df):
if os.path.isfile(file_path): # 두번째 데이터프레임 저장
with open(file_path, 'a', newline='') as myfile:
wr = csv.writer(myfile)
for i in range(len(ddargi_df)):
wr.writerow(ddargi_df.iloc[i])
else: # 처음으로 저장할 때
ddargi_df.to_csv(file_path, encoding="euc-kr", index=False) # 데이터 프레임=> csv
3. 끝나고 감탄하기
꿋~
'짜투리' 카테고리의 다른 글
[포트포워딩] 원격 설정을 해보쟈 뀨~ (1) | 2023.01.15 |
---|---|
[추천] 컴공생! 유용한 사이트랑 프로그램 알고 싶어? 일단 들어와~ (1) | 2023.01.04 |
[쓰기] (1) | 2022.11.21 |
[한글/word] word에서 ctrl+c해서 한글로 ctrl+v가 안대요우ㅜ (0) | 2022.11.21 |
[노션] 페이지 이동했는데 해당 위치에 페이지가 없을 때 (0) | 2022.10.18 |