Python에서 그래프 프로토콜 분석기 열기

Open Graph 프로토콜은 무엇을 위해 사용됩니까?



Open Graph protocol을 사용하면 모든 웹 페이지가 소셜 그래프에서 풍부한 개체가 될 수 있습니다. 예를 들어 Facebook에서 모든 웹 페이지가 Facebook의 다른 개체와 동일한 기능을 갖도록 하는 데 사용됩니다.

Open Graph Protocol은 Facebook과 사용자 데이터 및 웹 사이트 간의 통합을 허용하는 Facebook에 의해 처음 도입되었습니다. Open Graph 메타 태그를 웹사이트에 통합하면 소셜 네트워크가 웹 페이지에 제공된 데이터를 크롤링하는 데 도움이 되며 누군가가 귀하의 페이지를 공유할 때 표시할 페이지 요소를 식별할 수 있습니다.

Twitter 카드, Facebook 링크 공유, Whatsapp 링크 카드와 같은 소셜 네트워크에서 웹 링크를 공유하는 동안 이것을 볼 수 있습니다.

Open Graph protocol에 대해 자세히 알아보기
온라인 테스트 도구Open Graph Tester

우리는 웹사이트에서 OGP 데이터를 가져오는 간단한 Open Graph 프로토콜 분석기를 구축할 것입니다. Python 라이브러리 BeautifulSoup 및 요청을 사용하여.

beautifulsoup4 설치 및 요청

pip install requests
pip install beautifulsoup4


여기 사용자와 같은 웹 사이트는 학습 목적으로만 사용됩니다.

import requests
from bs4 import BeautifulSoup
url = "https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/"
r = requests.get(url=url)
# Create a BeautifulSoup object
soup = BeautifulSoup(r.text, 'html.parser')


위의 코드는 웹사이트 콘텐츠를 가져오고 데이터를 추출할 수 있는 BeautifulSoup 개체로 로드합니다.

# webpage can have more meta tags

# return the first meta tag
soup.find("meta")

# return all meta tag
soup.find_all("meta")

# return all meta tag with property as og:title
soup.find("meta",  property="og:title")



soup.find_all("meta") 이를 사용하여 모든 메타 태그를 찾은 다음 개별 태그를 필터링합니다.

# data holder
data = {
    "tag": {},
    "ogp": {}
}
# find all the meta tags in the web page
for i in soup.find_all("meta"):
    # extract individual tag with the property value
    if i.get("property", None) == "og:title":
        data["tag"]["title"] = i
        data["ogp"]["title"] = i.get("content", None)
    if i.get("property", None) == "og:url":
        data["tag"]["url"] = i
        data["ogp"]["url"] = i.get("content", None)
    if i.get("property", None) == "og:description":
        data["tag"]["description"] = i
        data["ogp"]["description"] = i.get("content", None)
    if i.get("property", None) == "og:image":
        data["tag"]["image"] = i
        data["ogp"]["image"] = i.get("content", None)
    if i.get("property", None) == "og:type":
        data["tag"]["type"] = i
        data["ogp"]["type"] = i.get("content", None)
    if i.get("property", None) == "og:site_name":
        data["tag"]["site_name"] = i
        data["ogp"]["site_name"] = i.get("content", None)
    if i.get("property", None) == "og:locale":
        data["tag"]["locale"] = i
        data["ogp"]["locale"] = i.get("content", None)
print(data)



{'tag': {'title': <meta content="Flutter &amp; Dart - The Complete Guide [2020 Edition]" property="og:title"/>, 'url': <meta content="https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/" property="og:url"/>, 'description': <meta content="A Complete Guide to the Flutter SDK &amp; Flutter Framework for building native iOS and Android apps" property="og:description"/>, 'image': <meta content="https://img-a.udemycdn.com/course/480x270/1708340_7108_4.jpg?mTkNpG_o5Wh0tcZgEWDnLLfndz7BG87EWBPuhbZij4iaIzFjeWC9AwmBEt4sTy0ioCD3r8w-Wtzfac00nfnb-TGMYVhafN8EXUpihTvhffAbcaEuTbQgRQvPORm5i1bX" property="og:image"/>, 'type': <meta content="udemy_com:course" property="og:type"/>, 'site_name': <meta content="Udemy" property="og:site_name"/>, 'locale': <meta content="en_US" property="og:locale"/>}, 'ogp': {'title': 'Flutter & Dart - The Complete Guide [2020 Edition]', 'url': 'https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/', 'description': 'A Complete Guide to the Flutter SDK & Flutter Framework for building native iOS and Android apps', 'image': 'https://img-a.udemycdn.com/course/480x270/1708340_7108_4.jpg?mTkNpG_o5Wh0tcZgEWDnLLfndz7BG87EWBPuhbZij4iaIzFjeWC9AwmBEt4sTy0ioCD3r8w-Wtzfac00nfnb-TGMYVhafN8EXUpihTvhffAbcaEuTbQgRQvPORm5i1bX', 'type': 'udemy_com:course', 'site_name': 'Udemy', 'locale': 'en_US'}}


이것은 좋지만 ogp에는 og:image, og:audio, og:determiner, og.local 등과 같은 더 많은 속성이 있습니다. 자세한 내용은 https://ogp.me/#optional .

개별 ogp 속성 값을 명시적으로 지정하지 않고 속성 속성에 og 값이 있는지 확인하거나 제외합니다.

data = {
    "tag": {},
    "ogp": {}
}
for i in soup.find_all("meta"):
    if i.get("property", None) is not None:     
        if i.get("property", None).split(":")[0] == "og":
            data["tag"][i.get("property", None)] = i
            data["ogp"][i.get("property", None)] = i.get("content", None)
print(data)



{'tag': {'og:title': <meta content="Flutter &amp; Dart - The Complete Guide [2020 Edition]" property="og:title"/>, 'og:url': <meta content="https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/" property="og:url"/>, 'og:description': <meta content="A Complete Guide to the Flutter SDK &amp; Flutter Framework for building native iOS and Android apps" property="og:description"/>, 'og:image': <meta content="https://img-a.udemycdn.com/course/480x270/1708340_7108_4.jpg?mTkNpG_o5Wh0tcZgEWDnLLfndz7BG87EWBPuhbZij4iaIzFjeWC9AwmBEt4sTy0ioCD3r8w-Wtzfac00nfnb-TGMYVhafN8EXUpihTvhffAbcaEuTbQgRQvPORm5i1bX" property="og:image"/>, 'og:type': <meta content="udemy_com:course" property="og:type"/>, 'og:site_name': <meta content="Udemy" property="og:site_name"/>, 'og:locale': <meta content="en_US" property="og:locale"/>}, 'ogp': {'og:title': 'Flutter & Dart - The Complete Guide [2020 Edition]', 'og:url': 'https://www.udemy.com/course/learn-flutter-dart-to-build-ios-android-apps/', 'og:description': 'A Complete Guide to the Flutter SDK & Flutter Framework for building native iOS and Android apps', 'og:image': 'https://img-a.udemycdn.com/course/480x270/1708340_7108_4.jpg?mTkNpG_o5Wh0tcZgEWDnLLfndz7BG87EWBPuhbZij4iaIzFjeWC9AwmBEt4sTy0ioCD3r8w-Wtzfac00nfnb-TGMYVhafN8EXUpihTvhffAbcaEuTbQgRQvPORm5i1bX', 'og:type': 'udemy_com:course', 'og:site_name': 'Udemy', 'og:locale': 'en_US'}}


제출된 이 블로그 게시물이 이 페이지에 대한 오픈 그래프 프로토콜을 생성한 후 페이지 소스 보기에서 확인할 수 있습니다.





**결론:** 웹 스크래핑 기법에 속하므로 주의해서 사용하시기 바랍니다. 모든 웹사이트에서 콘텐츠를 스크랩할 수 있는 것은 아닙니다. 이 경우 셀레늄과 같은 도구를 사용하여 웹사이트를 렌더링한 다음 웹 페이지 콘텐츠를 가져와 웹 스크래핑 도구에 전달합니다.

좋은 웹페이지 즐겨찾기