본문 바로가기
App Programming/Web Crawler

[Web Crawler] 네이버 클라우드 플랫폼

by goatlab 2022. 9. 28.
728x90
반응형
SMALL

네이버 클라우드 플랫폼

 

네이버 오픈API 서비스는 24시간 365일 무중단으로 운영되고 있다. 오픈API 오류에 신속하게 대응하기 위해 매 10분 단위로 자동으로 모니터링하고 있다. (https://developers.naver.com/main/)

 

▪ Open API : 누구나 사용할 수 있도록 공개된 API

▪ API (Application Programming Interface) : 데이터를 요청하여 주고 받기 위한 방식 또는 규격

 

Open API Key

 

 

[Products] → [서비스 API] → [데이터랩] → [Open API 신청] → [Application 등록] → [내 에플리케이션] → Client ID 및 Client secret 확인한다.

 

example code

 

# scrapy 설치
!pip install scrapy
import os
import sys
import urllib.request

client_id = "open api에서 발급받은 client id"
client_secret = "open api에서 발급받은 secret 번호"

# 검색어
encText=urllib.parse.quote("배트맨")

url = "https://openapi.naver.com/v1/search/blog?query=" + encText

request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id", client_id)
request.add_header("X-Naver-Client-Secret", client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()

if(rescode == 200):
    response_body = response.read()
    print(response_body.decode('utf-8'))

else:
    print("Error Code:" + rescode)

body=response_body.decode('utf-8')
body
import re

titles = re.findall('"title":"(.*?)",\n\t\t\t"link"',body) # \n 줄바꿈

print('<<제목 모음>>')
print(titles)
print('총 제목 수: ', len(titles), '개')
<<제목 모음>>
['[<b>배트맨<\\/b> 코믹스] <b>배트맨<\\/b> : 올빼미 법정 &amp; 올빼미 도시', 'DC 슈퍼맨+<b>배트맨<\\/b> 퓨전 캐릭터 재등장', '영화 더<b>배트맨<\\/b> 출연진 등장인물 배트모빌 번역 흑', '가장 인간적인 <b>배트맨<\\/b>의 탄생 : 영화 &lt;더 <b>배트맨<\\/b>&gt; 후기 (스포 有)', 'DCU 1180억 영화 배트걸 폐기 <b>배트맨<\\/b> 레슬리 그레이스 마이클... ', '<b>배트맨<\\/b> 아캄시티 명작 액션 어드벤처 PC게임 추천 시리즈', 'DC 신작 &apos;더 <b>배트맨<\\/b>&apos; 관련 추가 소식(스포)', '#반다이#<b>배트맨<\\/b>#BANDAI#BATMAN#프라모델#', '&lt;더 <b>배트맨<\\/b>&gt; - 정의(正義)를 정의(定義)하다', 'DC 영화 더 <b>배트맨<\\/b> 다크나이트 각본가가 감상평을 말하다']
총 제목 수:  10 개
links = re.findall('"link":"(.*?)",\n\t\t\t"description"',body)

print('\n<<링크 모음>>')
print(links)
print('총 링크 수: ', len(links), '개')
<<링크 모음>>
['https:\\/\\/blog.naver.com\\/zjwalangz\\/222850168870', 'https:\\/\\/blog.naver.com\\/tomstrong\\/222875563181', 'https:\\/\\/blog.naver.com\\/dongi0508\\/222628986052', 'https:\\/\\/blog.naver.com\\/siat25\\/222717152284', 'https:\\/\\/blog.naver.com\\/okjoa012\\/222841280487', 'https:\\/\\/blog.naver.com\\/melt2092\\/222883806954', 'https:\\/\\/blog.naver.com\\/connell3\\/222669118516', 'https:\\/\\/blog.naver.com\\/jegid\\/222859173438', 'https:\\/\\/blog.naver.com\\/newballight\\/222661207518', 'https:\\/\\/blog.naver.com\\/ptj0969\\/222729227769']
총 링크 수:  10 개
# 링크 부분에서 필요없는 부분 제거
blog_links = []

for i in links:
    a = i.replace('\\', '')
    b = a.replace('?Redirect=Log&logNo=', '/')
    blog_links.append(b)
    
print(blog_links)
print('생성된 링크 갯수:', len(blog_links),'개')
['https://blog.naver.com/zjwalangz/222850168870', 'https://blog.naver.com/tomstrong/222875563181', 'https://blog.naver.com/dongi0508/222628986052', 'https://blog.naver.com/siat25/222717152284', 'https://blog.naver.com/okjoa012/222841280487', 'https://blog.naver.com/melt2092/222883806954', 'https://blog.naver.com/connell3/222669118516', 'https://blog.naver.com/jegid/222859173438', 'https://blog.naver.com/newballight/222661207518', 'https://blog.naver.com/ptj0969/222729227769']
생성된 링크 갯수: 10 개
# 크롤링 결과를 data frame으로 저장
import pandas as pd

df = pd.DataFrame({'제목':titles, '링크':blog_links})
df

# 블로그 본문을 긁어오기 위한 웹페이지 크롤링
from bs4 import BeautifulSoup
from selenium import webdriver
from urllib.request import urlopen
import urllib.parse

# 접속하고자하는 url
url = "https://movie.naver.com/movie/bi/mi/basic.naver?code=154282#"

# Chrome Driver
driverPath = 'chromedriver.exe'

# Open Chrome
driver=webdriver.Chrome(driverPath)
driver.get(url)
html = driver.page_source
content = BeautifulSoup(html,'html.parser')

print(content.text)
print(content.prettify())
content.title
<title>더 배트맨 : 네이버 영화</title>
content.find_all('a')
content.find_all('div')
# 영화 소개 부분 데이터 크롤링
content.find_all(class_='con_tx')
# 이미지 크롤링
img = content.find_all("div", class_='poster')
img
# for larger size
img = img[1]
img
img_url = img.find("img")["src"]
img_url
urllib.request.urlretrieve(img_url, img.find("img")["alt"] + '.jpg')
# 블로그 링크 리스트를 이용한 블로그 본문 크롤링
# 네이버 포스트가 아닌 링크를 제거
blog_links.pop(4)

 

728x90
반응형
LIST