wisePocket

[Flask] Flask framework 미니프로젝트(project pedia) 03 (웹 크롤링 기능 부분 구현 및 테스트) 본문

Python&Flask Tutorials, AWS EB/Flask_project_pedia

[Flask] Flask framework 미니프로젝트(project pedia) 03 (웹 크롤링 기능 부분 구현 및 테스트)

ohnyong 2023. 7. 12. 21:33

개발하고자하는 프로젝트는 이전 project mars와 크게 다른 부분이

웹 크롤링을 이용한다는 점이다. 크롤링 할 때 *메타태그를 활용 할 것이라서

해당 부분의 기능을 테스트용으로 먼저 구현하고,

본 프로젝트에 삽입 할 예정이다.

 

#### 웹 크롤링
- URL로부터 영화 이미지, 영화 제목, 영화 설명 항목 메타태그 크롤링(soup.select_one)

1. 테스트용 URL

URL : https://movie.daum.net/moviedb/main?movieId=161806 

 

스즈메의 문단속

Daum영화에서 자세한 내용을 확인하세요!

movie.daum.net

"스즈메의 문단속" 이라는 영화의 URL을 대상으로 테스트를 진행하려한다.

 

2. URL로 들어가서 메타 태그 확인하기

URL로 들어가서 해당 웹 페이지의 소스를 확인해보면

<head>태그 내에 <meta ...>를 확인 할 수 있다.

 

3. 웹 크롤링을 위한 requests, Beautifulsoup 임포트 및 URL의 HTML 파싱

  • 웹 크롤링 테스트를 위한 meta_prac.py를 생성
  • 웹 크롤링을 위한 requests 임포트
  • 크롤링한 HTML을 text로 변환 parsing할 BeautifulSoup 임포트

 

  • requests.get()을 통해 URL의 데이터(HTML 소스)를 받고 data라는 변수에 담기
  • beautifulsoup()으로 data를 text 형태로 파싱, 구문 분석하여 soup이란 변수에 담기
import requests
from bs4 import BeautifulSoup

URL = 'https://movie.daum.net/moviedb/main?movieId=161806'
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')

 

4. "제목"을 가져와보자

  • 해당 웹 페이지의 HTML을 살펴보면 
  • <meta>태그 안에 property는 "og:title"이며 content에 내가 원하는 텍스트가들어가있다.

  • select_one()을 통해 soup에 담긴 HTML 소스 중 원하는 값이 있는 태그를 지목하고 해당 값을 선택할 수 있다.

 

ogtitle = soup.select_one('meta[property="og:title"]')['content']
  • 선택된 태그의 값을 담은 ogtitle이란 변수를 출력해보면
  • <meta>태그 중, property가 "og:title"인 'content'의 내용을 출력하고 있다.

5. 추가적으로 필요한것들도 가져와보자

원하는 값이 제목 이외에도 이미지 URL, 영화 설명이 필요하다.

위와 동일한 방식으로 HTML을 살펴보면

<meta>태그 안에 property는 "og:image"이며 content에 내가 원하는 이미지 URL이 들어가있다.

<meta>태그 안에 property는 "og:description"이며 content에 내가 원하는? 영화 설명이 들어가있다.

# meta태그의 프로퍼티가 og:title인 것을 가져온다.
# image, description도 가져온다.
ogtitle = soup.select_one('meta[property="og:title"]')['content']
ogimage = soup.select_one('meta[property="og:image"]')['content']
ogdesc = soup.select_one('meta[property="og:description"]')['content']
print(ogtitle+" /",ogimage+" /",ogdesc)

이제 URL로부터 영화 이미지, 영화 제목, 영화 설명 항목을 메타태그를 통해 얻어오는 것을 완성했다.


메타태그
메타 태그(meta tag)는 웹페이지가 담고 있는 컨텐츠가 아닌 웹페이지 자체의 정보를 명시하기 위한 목적으로 사용되는 HTML 태그를 의미

meta 태그는 검색엔진과 기타 클라이언트에 페이지에 대한 추가 정보를 제공하는 데 사용되는 HTML 태그입니다. 클라이언트는 meta 태그를 처리하고 지원하지 않는 태그는 무시합니다. meta 태그는 HTML 페이지의 <head> 섹션에 추가
https://developers.google.com/search/docs/crawling-indexing/special-tags?hl=ko

메타데이터: <meta> 요소 메타데이터는 데이터를 설명하는 데이터이다 그리고 HTML에서 문서에 공식적으로 메타데이터를 적용하는 방법이 있습니다. — the <meta> 요소. 물론 이 기사에서 다루고 있는 다른 것들도 메타 데이터라고 보면 됩니다. 페이지의 <head> 안에 다양한 형태의 <meta> 가 있습니다.
https://developer.mozilla.org/ko/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML

SNS등에서 (본 tstory도 마찬가지) URL링크를 공유하면
하단에 이미지/타이틀/내용 등이 나타나는 아래와 같은 것들이 meta 태그를 통해 나타난 것으로 이해하면 된다.

해당 프로젝트는 아래 깃을 통해 업데이트 되고 있습니다.

https://github.com/yzpocket/Flask_project_pedia

 

GitHub - yzpocket/Flask_project_pedia: [Flask] Flask framework 미니프로젝트(project pedia)

[Flask] Flask framework 미니프로젝트(project pedia). Contribute to yzpocket/Flask_project_pedia development by creating an account on GitHub.

github.com