본문 바로가기

Python/Python Basic

크롤링(Crawling)_02 (API를 이용한 크롤링)

API(Application Programming Interface)

- 특정 프로그램을 만들기 위해 제공되는 모듈(함수 등)을 의미

- WEB에서 사용될 때는 보통 WEB API로 지칭

- 일반적으로 XML, JSON의 형태도 응답을 전달 (원하는 데이터 추출이 수월)

*** 코드

200 : 정상

404 : 페이지 요청 오류

403 : 권한없음

500 : 서버에러

 

 

Daum API

- https://developers.daum.net/console

- [웹 검색 가이드 문서] https://developers.daum.net/services/apis/search/web

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
from bs4 import BeautifulSoup
import json
from pprint import pprint
 
res = requests.get('https://apis.daum.net/search/blog?apikey=ae1c8ab41d8d1745906e589fecc68dcc&q=%EC%95%84%EC%9D%B4%ED%8F%B0%20-%EB%84%A4%EC%98%A4&output=json')
# print(res.text) ## dict 모양의 data가 출력됨
# print(res.content)
 
# 문자열을 주게 되면 그것을 dict로 바꿔서 변환
data = json.loads(res.content)
# print(data)
 
print(data['channel']['title'])
 
=================<<실행결과>>=================
 
Search Daum Open API
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
pprint(data['channel']['item'])
 
=================<<실행결과>>=================
 
[{'author''김군의 생각하는노리터',
  'comment''http://blue2310.tistory.com/',
  'description''<b>아이폰</b> 7 플러스에 깔끔함이라는 옷을 입히다 <b>아이폰</b> 7 플러스에 슈피겐 '
                 '<b>아이폰</b>7플러스 케이스 <b>네오</b>하이브리드 CC2를 입혀 주었습니다. 이름도 참 기네요. '
                 '원래 기존 <b>네오</b>하이브리드CC도 좋았지만 완성도와 투명도를 높혀서 CC2를 내놓았다고 합니다. '
                 '기존에도...',
  'link''http://blue2310.tistory.com/3827',
  'pubDate''20170831070000',
  'title''슈피겐 <b>아이폰</b>7플러스 케이스 <b>네오</b>하이브리드CC2 장착 후기'},
 {'author''LiveREX의 컴부수기',
  'comment''http://liverex.net/',
  'description''밖에 없는데요. 보시는 것처럼 렌즈가 바닥에 닿는걸 완벽히 방지하는 설계를 보입니다. ▼ 지금까지 슈피겐에서 '
                 '출시한 <b>아이폰</b>7 플러스 케이스 ‘<b>네오</b>하이브리드CC’를 소개해 드렸습니다. 평소 해당 '
                 '브랜드에서 액세서리를 구해 쓰시는 분들이 적지 않은 것으로...',
  'link''http://liverex.net/4595',
  'pubDate''20161008090127',
  'title''<b>아이폰</b>7 플러스 케이스, 슈피겐 <b>네오</b>하이브리드CC 후기'},
 {'author''ScienceFiction',
  'comment''http://sciencefiction.tistory.com/',
  'description''* <b>아이폰</b>6 케이스 - 슈피겐 <b>네오</b> 하이브리드 샴페인골드(2015/02/12 작성) '
                 '가격이 조금 비싼감이 없지 않지만 기본적인 보호기능과 깔끔한 마감, <b>아이폰</b>6의 몸체와 닿는 '
                 '고무부분의 부드러움은 좋다. 고무와 메탈을 결합한 모습이다. <b>아이폰</b>6에 끼울때는 저 상태로...',
  'link''http://sciencefiction.tistory.com/297',
  'pubDate''20170110105214',
  'title''<b>아이폰</b>6 케이스 - 슈피겐 <b>네오</b> 하이브리드 샴페인 골드'},
 {'author''워터포르의 디지털 시간여행&와포TV',
  'comment''http://wapotv.com',
  'description''안녕하세요. 워터포르입니다. 이번에 리뷰할 제품은 높은 완성도와 아름다운 디자인을 자랑하는 슈피겐의 '
                 '<b>아이폰</b>7 플러스 케이스 신제품입니다. 제품명은 <b>네오</b>하이브리드 CC2인데요. 더욱 '
                 '투명해진 PC 백패널과 역시~ 완성도 높은 마감이 특징이랍니다. 투명 백패널...',
  'link''http://wapotv.com/221078338380',
  'pubDate''20170821005100',
  'title''슈피겐 <b>아이폰</b>7 플러스 케이스, <b>네오</b>하이브리드CC2 후기'},
 {'author''ScienceFiction',
  'comment''http://sciencefiction.tistory.com/',
  'description''* 부서진 <b>아이폰</b>6 슈피겐 <b>네오</b> 하이브리드 케이스 (2015/06/05 작성) 지난 '
                 '번에 이 케이스와 관련된 리뷰를 작성해 보았습니다. --&gt; 2015/02/12 - <b>아이폰</b>6 '
                 '케이스 - 슈피겐 <b>네오</b> 하이브리드 샴페인 골드 4개월 이상은 사용해 온 셈이네요. 그동안 특별한 '
                 '불만 없이...',
  'link''http://sciencefiction.tistory.com/411',
  'pubDate''20170111074808',
  'title''부서진 <b>아이폰</b>6 슈피겐 <b>네오</b> 하이브리드 케이스'},
 {'author''성긍정의 세상여행',
  'comment''http://blog.naver.com/hide400',
  'description''웹을 장착하고 마지막으로 테두리를 장착하면 끝!! 일단 <b>아이폰</b> 자체가 워낙 얇고 그립감은 솔직히 '
                 '그렇게 좋은 편은 아니라서 케이스...그렇게 강해보이지는 않아보여서 어느정도 조심해서 써야겠습니다. 이상, '
                 '슈피겐 <b>네오</b>하이브리드 리뷰 마치겠습니다',
  'link''http://blog.naver.com/hide400/221082945501',
  'pubDate''20170827003900',
  'title''<b>아이폰</b>6 케이스 슈피겐 <b>네오</b>하이브리드'},
 {'author''슈피겐코리아 공식 블로그',
  'comment''http://blog.naver.com/spigen_official',
  'description''기존에 출시한 케이스들이 업그레이드하여 미려함과 세련됨이 더 돋보이고 있습니다. 빨리 만나볼까요? '
                 '<b>아이폰</b>7/7플러스 케이스 : <b>네오</b>하이브리드2 한 층 업그레이드된 메탈릭 프레임 '
                 '슈피겐 <b>아이폰</b>7 케이스 <b>네오</b>하이브리드2는 메탈릭 프레임의 디자인 변경과 강화...',
  'link''http://blog.naver.com/spigen_official/221078935263',
  'pubDate''20170821191000',
  'title''[공지] 슈피겐 <b>아이폰</b>7 케이스 <b>네오</b>하이브리드2, 터프아머2'},
 {'author''나이스블루',
  'comment''http://bluesoccer.net/',
  'description''<b>아이폰</b>6s 케이스 슈피겐 <b>네오</b>하이브리드 EX 7개월 동안 사용했던 지금까지의 소감을 '
                 '올립니다. 저는 이 제품을 지난해 10월 23일 SK텔레콤 <b>아이폰</b>6s 로즈골드 런칭 행사때 '
                 '받았습니다. <b>아이폰</b>6s 로즈골드 구입을 위해 SK텔레콤 매장에서 줄을 서면서 선착순으로...',
  'link''http://bluesoccer.net/5449',
  'pubDate''20160528224140',
  'title''<b>아이폰</b>6s 케이스, 슈피겐 <b>네오</b>하이브리드 EX 후기'},
 {'author''씨디맨의 컴퓨터이야기',
  'comment''http://cdmanii.com/',
  'description''안됩니다. 구매하실때는 아래의 구성품과 같이 <b>네오</b> 하이브리드 프레임과 뒤면도 함께 구매하시면 '
                 '됩니다. <b>아이폰</b> 추천 케이스 3GS <b>iPhone</b> 실케 <b>네오</b> 하이브리드 '
                 '프레임 구성품 금색 하이브리드 프레임과 하이브리드 뒤면 안쪽면입니다. 뒷부분 커버부분은 지금...',
  'link''http://cdmanii.com/1324',
  'pubDate''20100130104102',
  'title''<b>아이폰</b> 추천 케이스 3GS <b>iPhone</b> 실케 <b>네오</b> 하이브리드 프레임'},
 {'author''LiveREX의 컴부수기',
  'comment''http://liverex.net/',
  'description''고심하는 분들도 많은데요. <b>네오</b>하이브리드 메탈은 이런 점에서도 이점을 갖는다 하겠습니다. ▼ '
                 '지금까지 슈피겐 <b>네오</b>하이브리드 메탈 <b>아이폰</b>6 플러스 케이스를 살펴봤습니다. 사용자에 '
                 '따라서는 케이스를 씌운 것만으로도 좀 더 넓어진 너비 때문에 <b>아이폰</b>6 플러스...',
  'link''http://liverex.net/2772',
  'pubDate''20141006064908',
  'title''<b>아이폰</b>6 플러스 케이스, <b>네오</b> 하이브리드 메탈 사용후기'}]
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for item in data['channel']['item']:
    print(item['author'], item['title'], '\n')
 
=================<<실행결과>>=================
 
김군의 생각하는노리터 슈피겐 <b>아이폰</b>7플러스 케이스 <b>네오</b>하이브리드CC2 장착 후기 
 
LiveREX의 컴부수기 <b>아이폰</b>7 플러스 케이스, 슈피겐 <b>네오</b>하이브리드CC 후기 
 
ScienceFiction <b>아이폰</b>6 케이스 - 슈피겐 <b>네오</b> 하이브리드 샴페인 골드 
 
워터포르의 디지털 시간여행&와포TV 슈피겐 <b>아이폰</b>7 플러스 케이스, <b>네오</b>하이브리드CC2 후기 
 
ScienceFiction 부서진 <b>아이폰</b>6 슈피겐 <b>네오</b> 하이브리드 케이스 
 
성긍정의 세상여행 <b>아이폰</b>6 케이스 슈피겐 <b>네오</b>하이브리드 
 
슈피겐코리아 공식 블로그 [공지] 슈피겐 <b>아이폰</b>7 케이스 <b>네오</b>하이브리드2, 터프아머2 
 
나이스블루 <b>아이폰</b>6s 케이스, 슈피겐 <b>네오</b>하이브리드 EX 후기 
 
씨디맨의 컴퓨터이야기 <b>아이폰</b> 추천 케이스 3GS <b>iPhone</b> 실케 <b>네오</b> 하이브리드 프레임 
 
LiveREX의 컴부수기 <b>아이폰</b>6 플러스 케이스, <b>네오</b> 하이브리드 메탈 사용후기 
cs

 

 

Daum 웹검색 API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import requests
import json
from html.parser import HTMLParser
from pprint import pprint
 
api_key = ''
url = 'https://apis.daum.net/search/web?apikey={}&q={}&output=json'.format(api_key, '갤럭시 노트 7')
 
res = requests.get(url)
data = json.loads(res.text)
 
= HTMLParser()
 
pprint(data['channel']['item'][0])
print('\n')
print(data['channel']['item'][0]['title'])
print('\n')
print('***** HTMLParser 모듈을 이용하여 HTML 파싱하기 *****')
print(h.unescape(data['channel']['item'][0]['title']))
 
==========================<<실행결과>>==========================
 
{'description''또는 타 기종으로의 교환 및 환불 절차가 진행되었습니다. # ## 교환 여부와는 관계 없이, 모든 '
                '&lt;b&gt;갤럭시 노트&lt;/b&gt;&lt;b&gt;7&lt;/b&gt;은 사용 중지 대상입니다. '
                '만약 이 제품을 소지하고 있다면 가능한 한 빨리 전원을 끈 후 최초 구매...',
 'link''https://namu.wiki/w/%EA%B0%A4%EB%9F%AD%EC%8B%9C%20%EB%85%B8%ED%8A%B87',
 'pubDate''2017-10-01 11:33:52',
 'title''&lt;b&gt;갤럭시 노트&lt;/b&gt;&lt;b&gt;7&lt;/b&gt; - 나무위키',
 'url''namu.wiki'}
 
 
&lt;b&gt;갤럭시 노트&lt;/b&gt;&lt;b&gt;7&lt;/b&gt; - 나무위키
 
 
***** HTMLParser 모듈을 이용하여 HTML 파싱하기 *****
<b>갤럭시 노트</b><b>7</b> - 나무위키
cs

 

 

NAVER API

- https://developers.naver.com/main/

- [블로그 검색 가이드] https://developers.naver.com/docs/search/blog/

 

예제 #1 (json형식으로 크롤링)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import json
import requests
from pprint import pprint
 
url = 'https://openapi.naver.com/v1/search/blog.json?query={}'.format('킹스맨2')
 
headers = {}
headers['X-Naver-Client-Id'= ''
headers['X-Naver-Client-Secret'= ''
 
# header는 key value로 이루어 지기 때문에 dict로 가져올 수 있음
res = requests.get(url, headers = headers)
#pprint(res.text)
data = json.loads(res.text)
#pprint(data)
#print(data['items'])
 
for item in data['items']:
    print(item['bloggername'])
    print('*'*20)
    print(item['description'], '\n')
 
==========================<<실행결과>>==========================
 
김망상의 망상 라이프스타일
********************
불한당에서 시작해 악녀와 트랜스포머, 리얼에서 브이아이피까지 처참한 영화로 점철된 지난 날의 내 연쇄 망작 관람 릴레이를 <b>킹스맨2</b>가 끊어주리라 생각했다. 그렇게 그렇게 기대했는데 :: <b>킹스맨2</b> 후기...  
 
정아
********************
루이스1987 클래식수트, <b>킹스맨2</b> 콜린퍼스 향수라고? 안녕하세요 정아에요 :) 오늘은 이번에 개봉한... 2. 브랜드 컬렉션은 본점 서촌 퍼뮤머리를 비롯한 공식 홈페이지 및 일부 엄선된 온라인과 오프라인...  
 
폴쌤의 글공간
********************
해리를 통해 보여줬던 그 명장면들은 다 어디가고 그냥 흔한 액션영화가 되어 버린 듯 해서 여러모로 아쉬움이 남는 <b>킹스맨 2</b> 골든서클. 역시 속편으로 성공하기란 참으로 어려운 일이었나. 캐릭터들이...  
 
곰솔이의 영화연애
********************
9월 27일 개봉영화 &lt;<b>킹스맨</b>: 골든 서클&gt; 후기 드디어 다시 만난 '<b>킹스맨</b>' 2015년 2월, 개봉 후에 엄청난 반응을 일으키며 청소년 관람 불가 영화임에도 무려 612만 명이라는 관객 수를 돌파했던 &lt;<b>킹스맨</b>: 시크릿...  
 
銀雨
********************
돈내고 볼만한 영화 거나하게 약을 빤 전작과 달리 약기운만 어렴풋이 남아있는 <b>킹스맨2</b> <b>킹스맨2</b>는 킹스맨의 이름을 달고나온 이상 강약중간약약약약약약의 약약약, 약, 약...약...그리고 또 약에 흠뻑 젖은...  
 
프리멜리[PRIMELI]
********************
즐거운 일요일이에요 왜냐하면 내일이 월요일일지라도 연휴기 때문이쥬 (프리멜리 매장은 오픈이에요) 지난 금요일 , 남자친구랑 영화를 보러 가기로 했어요 킹스맨 골든서클 <b>킹스맨2</b> 매장마감하고 cgv로...  
 
스투시의 Marketing&AD Factory
********************
John Denver - Take Me Home, Country Roads (존덴버의 오리지널 곡/1971<b>킹스맨 2</b> 극장에서 보시길 추천해요. 영화 보고 나서 술 한잔 하면서 영화를 본 감상을 함께 나누는 즐거움도 잊지 마시길......  
 
닝이의 작은 이야기
********************
다른 잇님들 모두 비슷하지 않을까 하는 생각이 드네요~ ㅋㅋㅋ 오늘은 영화 <b>킹스맨2</b> 골든서클 관람기를... 1편에서 죽은걸로 나왔던 해리하트가 <b>킹스맨2</b> 골든서클에서 이렇게 살아 돌아오니 더욱 흥미진진...  
 
천천히 꾸준히(Slow and Steady)
********************
<b>킹스맨</b>: 골든 서클 감독 매튜 본 출연 태런 에저튼, 줄리안 무어, 콜린 퍼스 개봉 2017 영국, 미국 상세보기 어떻게 처음 &lt;<b>킹스맨</b>&gt;을 보게 되었는지 기억나진 않지만 참 재미있었다. 가장 유명한 2개의 장면이 있다....  
 
라임의 순간
********************
킹스맨 : 골든서클 ( Kingsman: The Golden Circle, 2017 ) 킹스맨1편을 너무 재밌게 봐서 <b>킹스맨2</b>를 제작한다는 소식을 들었을 때 너무 기뻤었고 기다렸다. 그리고 드디어 개봉 ! 주말에 바로 미니랑 보고 왔다...  
 
cs

 

 

예제 #2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests
 
client_key = ''
client_secret = ''
 
naver_url = 'https://openapi.naver.com/v1/search/blog.json?query=킹스맨2'
 
headers = {}
headers['Content-Type'= 'application/xml'
headers['X-Naver-Client-Id'= client_key
headers['X-Naver-Client-Secret'= client_secret
 
res = requests.get(naver_url, headers = headers)
data = json.loads(res.text)
 
print(data['items'][0]['title'])
print('\n')
print(data['items'][0]['description'])
 
==========================<<실행결과>>==========================
 
<b>킹스맨2</b> 후기 : 엘튼 존이 다 한 영화
 
 
불한당에서 시작해 악녀와 트랜스포머, 리얼에서 브이아이피까지 처참한 영화로 점철된 지난 날의 내 연쇄 망작 관람 릴레이를 <b>킹스맨2</b>가 끊어주리라 생각했다. 그렇게 그렇게 기대했는데 :: <b>킹스맨2</b> 후기... 
cs

 

 

반응형