1. 설명
- 뉴스기사 URL을 input으로 넣으면 해당 URL에서 대표이미지, 기사 제목 등을 가져오는 모듈이 필요했다.
- 예를 들자면 아래 사진처럼 카카오톡이나 슬랙 등에 url만 넣으면 자동으로 이미지와 링크로 연결되는 컨텐츠를 만들어주는것이다.
2. 방법
- 구글링을 해보니 기사에는 meta tag라는것이 있었고, 이를 parsing하면 간단히 구현이 가능해보였다.
- Python의 requests와 BeautifulSoup, Pillow, io를 사용하여 구현하기로 마음을 먹었다.
- 우선 header를 설정하여 주었고, requests와 Beutifulsoup으로 html을 parsing 해왔다.
- 이후 find 함수를 통해 meta의 title, description, image_url, image를 가져왔고, 이를 dict 형태로 return 하였다.
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
from bs4 import BeautifulSoup
from PIL import Image
from io import BytesIO
def article_parsing(url):
# request error를 피하기 위한 header 설정
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
# html parser
web = BeautifulSoup(requests.get(url, allow_redirects=False, headers=header).text, 'html.parser')
# 제목
title = web.find("meta", property="og:title")['content']
# 요약 내용
description = web.find('meta', property="og:description")['content']
# 대표 이미지 url
image_url = web.find("meta", property="og:image")['content']
# 대표이미지 객체
image = Image.open(BytesIO(requests.get(image_url, headers=header).content))
return {'title':title, 'description' : description, 'image': image, 'image_url':image_url, 'url':url }
3. 결과
- 위의 모듈을 사용하여 뉴스기사의 URL을 넣으면 meta tag를 사용하여 이미지와, 제목, url, description을 가져오는것을 잘 확인하였다.