728x90
데이터 수집을 위한 웹크롤링 방법¶
request Module¶
http request/response 를 위한 모듈 HTTP method를 메소드 명으로 사용해 request 요청하기¶
In [3]:
import requests
url = "https://sports.news.naver.com/news?oid=139&aid=0002154211"
get 요청하기¶
- <response[200]> 이면 문제가 없다는 뜻
In [6]:
resp = requests.get(url)
resp
Out[6]:
<Response [200]>
In [8]:
resp.text
Out[8]:
너무 길어서 생략
post 요청하기¶
- 국민대학교 가상캠퍼스에 로그인 하기
In [9]:
url = 'https://ecampus.kookmin.ac.kr/magicsso/requestAuth.php'
data = {
'loginId' : 'lkb54321',
'loginPwd' : 'Dlrlqo12#$'
}
resp = requests.post(url, data=data)
resp.text
Out[9]:
너무 길어서 생략
Header 활용하기¶
In [16]:
url = 'https://sports.news.naver.com/news?oid=108&aid=0002976247'
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'}
resp = requests.get(url, headers=headers)
resp.text
Out[16]:
너무 길어서 생략
HTTP response 처리하기¶
- status_code
- text 속성확인
In [17]:
url = 'https://sports.news.naver.com/news?oid=108&aid=0002976247'
resp = requests.get(url)
resp.text
resp.status_code
Out[17]:
200
In [19]:
if resp.status_code == 200:
print(resp.text)
else:
print("error")
Open API 사용해서 웹크롤링 실습¶
- 공공데이터 포털 회원가입/ 로그인
- API 사용 요청/키발급
- API 문서 확인
- API 테스트 및 개발
한국관광공사_영문 관광정보 서비스¶
Key 값 확인하기¶
- 서비스를 트래킹하는 목적
In [45]:
servicekey = "B0ipkeonzVCAjoeaBMTbL%2BxZ2prxc89mfYcjHfhs2ALChachsOeeHmhvTzCn2%2B6z7wxq%2FNuXBXH3bx0sF3kCRQ%3D%3D"
Endpoint 확인하기¶
- API가 서비스되는 서버의 IP 혹은 Domain 주소
In [46]:
endpoint = "http://api.visitkorea.or.kr/openapi/service/rest/EngService/areaCode?serviceKey={}&numOfRows=10&pageSize=10&pageNo=1&MobileOS=ETC&MobileApp=AppTest&_type=json".format(servicekey)
print(endpoint)
http://api.visitkorea.or.kr/openapi/service/rest/EngService/areaCode?serviceKey=B0ipkeonzVCAjoeaBMTbL%2BxZ2prxc89mfYcjHfhs2ALChachsOeeHmhvTzCn2%2B6z7wxq%2FNuXBXH3bx0sF3kCRQ%3D%3D&numOfRows=10&pageSize=10&pageNo=1&MobileOS=ETC&MobileApp=AppTest&_type=json
Parameter 확인하기¶
- API 호출에 필요한 parameter 값 확인 및 구성
- 요청 및 Response 확인하기
- request.get()
- resp.status_code
In [49]:
endpoint = "http://api.visitkorea.or.kr/openapi/service/rest/EngService/areaCode?serviceKey={}&numOfRows=10&pageSize=10&pageNo={}&MobileOS=ETC&MobileApp=AppTest&_type=json".format(servicekey,1)
resp = requests.get(endpoint)
print(resp.status_code)
print(resp.text)
data = resp.json()
200
{"response":{"header":{"resultCode":"0000","resultMsg":"OK"},"body":{"items":{"item":[{"code":1,"name":"Seoul","rnum":1},{"code":2,"name":"Incheon","rnum":2},{"code":3,"name":"Daejeon","rnum":3},{"code":4,"name":"Daegu","rnum":4},{"code":5,"name":"Gwangju","rnum":5},{"code":6,"name":"Busan","rnum":6},{"code":7,"name":"Ulsan","rnum":7},{"code":8,"name":"Sejong","rnum":8},{"code":31,"name":"Gyeonggi-do","rnum":9},{"code":32,"name":"Gangwon-do","rnum":10}]},"numOfRows":10,"pageNo":1,"totalCount":17}}}
서울 자료 가져오기¶
- Json데이터 타입이 Dict이기 때문에 Dict에서의 인덱싱 방법을 사용
In [53]:
data['response']['body']['items']['item'][0]
Out[53]:
{'code': 1, 'name': 'Seoul', 'rnum': 1}
728x90
반응형
'AI > K-Digital Training' 카테고리의 다른 글
006. BeautifulSoup으로 웹크롤링 학습2 (0) | 2021.08.02 |
---|---|
005. BeautifulSoup으로 웹크롤링 학습1 (0) | 2021.08.01 |
003. Numpy_Study2 (0) | 2021.07.30 |
002.Numpy_Study 1 (0) | 2021.07.29 |
001. 데이터 분석이란?? (0) | 2021.07.20 |