인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
정부 공공 데이터 Open API를 활용한 크롤링(Python)
정부 공공 데이터 Open API를 활용하여 크롤링을 연습하고자 한다.
정부 공공 데이터 Open API를 통한 크롤링 연습(대기오염 정보)
import requests
service_key = '(본인)일반인증키'
params = '&numOfRows=10&pageNo=1&sidoName=서울&ver=1.3'
open_api = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey=' + service_key + params
res = requests.get(open_api)
print(res.text)
```
결과 :
<?xml version="1.0" encoding="UTF-8"?>
<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL_CODE</resultMsg>
</header>
<body>
<items>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>36</pm10Value24>
<so2Value>0.004</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>35</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>22</pm25Value>
<no2Flag/>
<mangName>도시대기</mangName>
<stationName>강남구</stationName>
<no2Value>0.035</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>69</khaiValue>
<coValue>0.6</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>23</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.002</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>36</pm10Value24>
<so2Value>0.004</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>44</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>29</pm25Value>
<no2Flag/>
<mangName>도시대기</mangName>
<stationName>서초구</stationName>
<no2Value>0.044</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>77</khaiValue>
<coValue>0.8</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>26</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.008</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>43</pm10Value24>
<so2Value>0.003</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>54</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>28</pm25Value>
<no2Flag/>
<mangName>도로변대기</mangName>
<stationName>도산대로</stationName>
<no2Value>0.041</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>77</khaiValue>
<coValue>1.0</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>26</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.003</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>33</pm10Value24>
<so2Value>0.004</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>39</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>22</pm25Value>
<no2Flag/>
<mangName>도로변대기</mangName>
<stationName>강남대로</stationName>
<no2Value>0.030</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>53</khaiValue>
<coValue>1.1</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>22</pm25Value24>
<no2Grade>1</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.006</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>39</pm10Value24>
<so2Value>0.004</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>42</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>27</pm25Value>
<no2Flag/>
<mangName>도시대기</mangName>
<stationName>송파구</stationName>
<no2Value>0.040</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>74</khaiValue>
<coValue>0.8</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>25</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.002</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>38</pm10Value24>
<so2Value>0.003</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>36</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>24</pm25Value>
<no2Flag/>
<mangName>도시대기</mangName>
<stationName>강동구</stationName>
<no2Value>0.031</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>77</khaiValue>
<coValue>0.6</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>26</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.002</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>45</pm10Value24>
<so2Value>0.004</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>46</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>23</pm25Value>
<no2Flag/>
<mangName>도로변대기</mangName>
<stationName>천호대로</stationName>
<no2Value>0.038</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>74</khaiValue>
<coValue>0.8</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>25</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.001</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>37</pm10Value24>
<so2Value>0.005</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>37</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>26</pm25Value>
<no2Flag/>
<mangName>도시대기</mangName>
<stationName>금천구</stationName>
<no2Value>0.043</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>79</khaiValue>
<coValue>0.7</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>27</pm25Value24>
<no2Grade>2</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.002</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>47</pm10Value24>
<so2Value>0.005</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>55</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>3</khaiGrade>
<pm25Value>32</pm25Value>
<no2Flag/>
<mangName>도로변대기</mangName>
<stationName>시흥대로</stationName>
<no2Value>0.076</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>117</khaiValue>
<coValue>1.1</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>26</pm25Value24>
<no2Grade>3</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.002</o3Value>
</item>
<item>
<pm25Grade1h>2</pm25Grade1h>
<pm10Value24>33</pm10Value24>
<so2Value>0.002</so2Value>
<pm10Grade1h>2</pm10Grade1h>
<pm10Value>34</pm10Value>
<o3Grade>1</o3Grade>
<pm25Flag/>
<khaiGrade>2</khaiGrade>
<pm25Value>21</pm25Value>
<no2Flag/>
<mangName>도시대기</mangName>
<stationName>강북구</stationName>
<no2Value>0.021</no2Value>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>61</khaiValue>
<coValue>0.5</coValue>
<pm10Flag/>
<sidoName>서울</sidoName>
<pm25Value24>20</pm25Value24>
<no2Grade>1</no2Grade>
<o3Flag/>
<pm25Grade>2</pm25Grade>
<so2Flag/>
<coGrade>1</coGrade>
<dataTime>2021-11-03 08:00</dataTime>
<pm10Grade>2</pm10Grade>
<o3Value>0.007</o3Value>
</item>
</items>
<numOfRows>10</numOfRows>
<pageNo>1</pageNo>
<totalCount>40</totalCount>
</body>
</response>
```
https://www.data.go.kr 에서 회원가입 후 Open API 활용신청을 통해 본인의 인증키를 발급받아 변수 service_key
에 넣으면 된다.
또한, 변수 params에는 Open API의 요청 메시지 항목명과 해당 값을 넣은 것이다. (변수 open_api의 형식 중요)
일반적인 크롤링처럼, requests 라이브러리의 get() 함수를 통해 정부 공공 데이터 Open API로 데이터를 가져온다.
참고로, 위의 예시코드에서 정부 Open API를 통해 크롤링하여 가져온 데이터는 XML 형태이다.(JSON 형태도 존재)
정부 공공 데이터 Open API를 통한 크롤링 연습(데이터 추출)
import requests
from bs4 import BeautifulSoup
service_key = '(본인)일반인증키'
params = '&numOfRows=10&pageNo=1&sidoName=서울&ver=1.3'
open_api = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey=' + service_key + params
res = requests.get(open_api)
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.find_all('item')
for item in data:
print(item)
stationname = item.find('stationname')
pm10grade = item.find('pm10grade')
print(stationname.get_text(), pm10grade.get_text())
```
find_all() 결과 :
<item>
<pm25grade1h></pm25grade1h>
<pm10value24>-</pm10value24>
<so2value>-</so2value>
<pm10grade1h></pm10grade1h>
<pm10value>-</pm10value>
<o3grade></o3grade>
<pm25flag>점검및교정</pm25flag>
<khaigrade></khaigrade>
<pm25value>-</pm25value>
<no2flag>점검및교정</no2flag>
<mangname>도시대기</mangname>
<stationname>강남구</stationname>
<no2value>-</no2value>
<so2grade></so2grade>
<coflag>점검및교정</coflag>
<khaivalue>-</khaivalue>
<covalue>-</covalue>
<pm10flag>점검및교정</pm10flag>
<sidoname>서울</sidoname>
<pm25value24>-</pm25value24>
<no2grade></no2grade>
<o3flag>점검및교정</o3flag>
<pm25grade></pm25grade>
<so2flag>점검및교정</so2flag>
<cograde></cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade></pm10grade>
<o3value>-</o3value>
</item>
강남구
<item>
<pm25grade1h>1</pm25grade1h>
<pm10value24>38</pm10value24>
<so2value>0.003</so2value>
<pm10grade1h>1</pm10grade1h>
<pm10value>23</pm10value>
<o3grade>2</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>13</pm25value>
<no2flag></no2flag>
<mangname>도시대기</mangname>
<stationname>서초구</stationname>
<no2value>0.020</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>79</khaivalue>
<covalue>0.4</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>27</pm25value24>
<no2grade>1</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.033</o3value>
</item>
서초구 2
<item>
<pm25grade1h>1</pm25grade1h>
<pm10value24>40</pm10value24>
<so2value>0.003</so2value>
<pm10grade1h>1</pm10grade1h>
<pm10value>21</pm10value>
<o3grade>2</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>11</pm25value>
<no2flag></no2flag>
<mangname>도로변대기</mangname>
<stationname>도산대로</stationname>
<no2value>0.021</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>69</khaivalue>
<covalue>0.6</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>23</pm25value24>
<no2grade>1</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.035</o3value>
</item>
도산대로 2
<item>
<pm25grade1h>2</pm25grade1h>
<pm10value24>39</pm10value24>
<so2value>-</so2value>
<pm10grade1h>2</pm10grade1h>
<pm10value>35</pm10value>
<o3grade></o3grade>
<pm25flag></pm25flag>
<khaigrade></khaigrade>
<pm25value>19</pm25value>
<no2flag>점검및교정</no2flag>
<mangname>도로변대기</mangname>
<stationname>강남대로</stationname>
<no2value>-</no2value>
<so2grade></so2grade>
<coflag>점검및교정</coflag>
<khaivalue>-</khaivalue>
<covalue>-</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>22</pm25value24>
<no2grade></no2grade>
<o3flag>점검및교정</o3flag>
<pm25grade>2</pm25grade>
<so2flag>점검및교정</so2flag>
<cograde></cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>-</o3value>
</item>
강남대로 2
<item>
<pm25grade1h>2</pm25grade1h>
<pm10value24>45</pm10value24>
<so2value>0.003</so2value>
<pm10grade1h>2</pm10grade1h>
<pm10value>33</pm10value>
<o3grade>2</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>18</pm25value>
<no2flag></no2flag>
<mangname>도시대기</mangname>
<stationname>송파구</stationname>
<no2value>0.027</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>74</khaivalue>
<covalue>0.4</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>25</pm25value24>
<no2grade>1</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.034</o3value>
</item>
송파구 2
<item>
<pm25grade1h></pm25grade1h>
<pm10value24>-</pm10value24>
<so2value>-</so2value>
<pm10grade1h></pm10grade1h>
<pm10value>-</pm10value>
<o3grade></o3grade>
<pm25flag>점검및교정</pm25flag>
<khaigrade></khaigrade>
<pm25value>-</pm25value>
<no2flag>점검및교정</no2flag>
<mangname>도시대기</mangname>
<stationname>강동구</stationname>
<no2value>-</no2value>
<so2grade></so2grade>
<coflag>점검및교정</coflag>
<khaivalue>-</khaivalue>
<covalue>-</covalue>
<pm10flag>점검및교정</pm10flag>
<sidoname>서울</sidoname>
<pm25value24>-</pm25value24>
<no2grade></no2grade>
<o3flag>점검및교정</o3flag>
<pm25grade></pm25grade>
<so2flag>점검및교정</so2flag>
<cograde></cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade></pm10grade>
<o3value>-</o3value>
</item>
강동구
<item>
<pm25grade1h>2</pm25grade1h>
<pm10value24>51</pm10value24>
<so2value>0.003</so2value>
<pm10grade1h>2</pm10grade1h>
<pm10value>49</pm10value>
<o3grade>1</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>16</pm25value>
<no2flag></no2flag>
<mangname>도로변대기</mangname>
<stationname>천호대로</stationname>
<no2value>0.034</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>72</khaivalue>
<covalue>0.5</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>24</pm25value24>
<no2grade>2</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.024</o3value>
</item>
천호대로 2
<item>
<pm25grade1h>2</pm25grade1h>
<pm10value24>38</pm10value24>
<so2value>0.005</so2value>
<pm10grade1h>2</pm10grade1h>
<pm10value>39</pm10value>
<o3grade>2</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>24</pm25value>
<no2flag></no2flag>
<mangname>도시대기</mangname>
<stationname>금천구</stationname>
<no2value>0.024</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>77</khaivalue>
<covalue>0.4</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>26</pm25value24>
<no2grade>1</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.036</o3value>
</item>
금천구 2
<item>
<pm25grade1h>2</pm25grade1h>
<pm10value24>50</pm10value24>
<so2value>0.004</so2value>
<pm10grade1h>2</pm10grade1h>
<pm10value>42</pm10value>
<o3grade>1</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>22</pm25value>
<no2flag></no2flag>
<mangname>도로변대기</mangname>
<stationname>시흥대로</stationname>
<no2value>0.035</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>79</khaivalue>
<covalue>0.5</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>27</pm25value24>
<no2grade>2</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.026</o3value>
</item>
시흥대로 2
<item>
<pm25grade1h>2</pm25grade1h>
<pm10value24>42</pm10value24>
<so2value>0.003</so2value>
<pm10grade1h>2</pm10grade1h>
<pm10value>31</pm10value>
<o3grade>2</o3grade>
<pm25flag></pm25flag>
<khaigrade>2</khaigrade>
<pm25value>17</pm25value>
<no2flag></no2flag>
<mangname>도시대기</mangname>
<stationname>강북구</stationname>
<no2value>0.019</no2value>
<so2grade>1</so2grade>
<coflag></coflag>
<khaivalue>69</khaivalue>
<covalue>0.3</covalue>
<pm10flag></pm10flag>
<sidoname>서울</sidoname>
<pm25value24>23</pm25value24>
<no2grade>1</no2grade>
<o3flag></o3flag>
<pm25grade>2</pm25grade>
<so2flag></so2flag>
<cograde>1</cograde>
<datatime>2021-11-03 14:00</datatime>
<pm10grade>2</pm10grade>
<o3value>0.037</o3value>
</item>
강북구 2
find() 결과 :
중구 2
한강대로 2
종로구 2
청계천로 2
종로 2
용산구 2
광진구 2
성동구 2
강변북로 2
중랑구 2
```
일반적인 크롤링처럼, requests와 bs4 라이브러리를 사용하여 find_all() 함수로 item 태그에 존재하는 데이터를
가져온 후, 다시 한 번 find() 함수를 통해 stationname 태그와 pm10grade 태그의 정보를 추출한 것이다.
여기서 find_all() 함수로 가져온 데이터는 XML 형태로 작성된 데이터이다.
참고내용
* XML이란?
XML은 Extensible Markup Language의 약자로, 특정 목적에 따라 데이터를 태그로 감싸서 마크업하는 범용적인
포멧이다.
또한, 마크업 언어는 태그 등을 이용하여 데이터의 구조를 기술하는 언어로 XML은 HTML과 유사하게 데이터를 계층
구조로 표현한다.
XML의 기본 구조는 아래와 같다.
- <태그 속성 = "속성 값">내용</태그>
단, XML은 HTML과 달리 태그의 속성을 사용자가 설정할 수 있으며 JSON과 함께 API의 데이터를 다루는데 사용된다.
'Python' 카테고리의 다른 글
Python - 크롤링을 위한 지식(정규 표현식) (0) | 2021.11.04 |
---|---|
Python - 크롤링을 위한 지식(문자열 함수) (0) | 2021.11.04 |
Python - 네이버 검색 Open API를 활용한 크롤링 (1) | 2021.11.01 |
Python - 크롤링을 위한 지식(Open API, JSON) (0) | 2021.11.01 |
Python - 엑셀파일과 크롤링 (0) | 2021.11.01 |
댓글