본문 바로가기
웹 프로그래밍(풀스택-->python)

48. 조각 기능 구현해보기

by 백엔드개발자0107 2021. 5. 6.

자 이제, 우리는 앞서 봤던 사이트를 통해서 조각 기능을 구현하는것을 해볼것이다..!

 

자 우리가 api를 설계했으면, 그 기술을 먼저 검증해봐야 한다...

 

즉 그런 기능들을 미리 설계해서 테스트 해보는데 그런것들을 조각기능이라고 한다..

 

즉, 이미지 ,제목 ,요약을 어떻게 url만 갖고 크롤링을 하는지 요거를 먼저 알아보자

 

결론적으로는 meta태그라는 것을 이용해서 크롤링을 해볼것이다.!

 

그렇담 메타테그란 무엇인가?

 

위 예를 보면서 이해해보자!

 

우리는 앞서 말한대로 url을 넣어서 ,이미지 ,제목 ,요약 등을 가지고 와야 한다.

 

그렇다면 이 url이 어디에 있나?

 

자 meta태그라는것은 head태그 안에 있다.

 

 

자 그린북 카드링크를 눌러보면

 

movie.naver.com/movie/bi/mi/basic.nhn?code=171539

 

그린 북

1962년 미국, 입담과 주먹만 믿고 살아가던 토니 발레롱가(비고 모텐슨)는 교양과 우아함 그 자체인천재...

movie.naver.com

이런식으로 meta태그 og:image,og:title,og:description 이라는 것을 메타태그 에 넣어두면 우리가 스크래핑을 해서 잘 

 

뿌려 줄 수 가 있다.!

 

자 그럼 우리가 할것은 이 og:image,og:title,og:description을 스크래핑을 해올것이다.

 

 

import requests
from bs4 import BeautifulSoup

url = 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(url, headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one("head > meta:nth-child(9)")
print(title)

 

 

이렇게 하면 값이 나올꺼 같지만, 프린트해도 아무런 값이 나오지 않는다.

 

왜 그럴까?

 

이제부터 크롤링의 묘미를 알아보자.!

 

가장 다른점은 우리가 브라우저에서 들어갔을떄 나오는 meta태그의 순서와 파이썬 코드가 들어갔을때 나오는 메타태그 순서가 다르기 때문

 

그렇다. 그래서 이것보다는 다른 방법을 알아보자. 즉 새로운 beatifulsoup의 팁이다. 

 

그 방법은 이거다.

 

title = soup.select_one('meta[property="og:title"]')

이것의 의미는 메타태그중에서 이 속성이 일치하는 애를 가지고 와라 를 의미한다.!

 

즉 여기서는 

 

property="og:title"

 

이 부분이 될것이다.

 

여기서 이 컨텐츠만 가지고 오면 된다.

 

그래서

 

import requests
from bs4 import BeautifulSoup

url = 'https://movie.naver.com/movie/bi/mi/basic.nhn?code=171539'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(url, headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('meta[property="og:title"]')
print(title["content"])

이렇게 하면 컨텐츠만 가지고 온다.!

 

계속해서 응용하면,,

 

최종적으로 결과가 이렇게 된다!

 

 

자 최종적으로 조각기능을 완성한것이다.!