Python에서 Google API를 사용하는 맞춤 검색 엔진

Jay Shaw 2023년6월21일
  1. Google CSE 플랫폼을 사용하여 검색 엔진 만들기
  2. Python에서 맞춤 검색 API 구현
  3. 결론
Python에서 Google API를 사용하는 맞춤 검색 엔진

이 문서에서는 Python에서 Google 검색 API를 사용하여 맞춤 검색 엔진(CSE)을 만드는 방법을 설명합니다. CSE는 개발자가 웹사이트, 모바일 앱 및 기타 항목을 포함한 모든 애플리케이션에 통합할 수 있도록 설계된 검색 엔진입니다.

웹 스크래핑의 경우 많은 앱에서 Google 맞춤검색 엔진을 사용합니다. 이 기사에서는 Python에서 CSE를 설정하고 Google 검색 API를 사용하는 방법을 설명합니다.

요청이 몇 번 있을 때마다 검색이 제한되기 때문에 Google 검색을 수동으로 스크래핑하는 것은 매우 권장되지 않습니다.

Google CSE 플랫폼을 사용하여 검색 엔진 만들기

Python에서 Google 검색 API를 사용하여 검색 결과를 얻는 것은 3계층 프로세스입니다. Google 검색에서 직접 결과를 반환하는 웹 스크래핑과 달리 이 방법은 사용자 지정 검색 엔진을 만들고 이를 사용하여 결과를 가져옵니다.

이렇게 하면 요청 전송에 대한 임계값 없이 스크랩과 동일한 결과를 가져오는 데 도움이 됩니다.

검색 엔진을 만들려면 프로그래밍 가능한 검색 엔진 페이지를 찾거나 이 링크를 클릭하십시오. 검색 엔진의 이름을 지정하고 무엇을 검색하시겠습니까? 안에 샘플 URL을 추가합니다.

이 샘플 URL은 나중에 변경할 수 있으며 그렇게 할 것입니다.

reCAPTCHA를 확인하고 만들기를 클릭하여 사용자 지정 검색 엔진을 만듭니다. 전체 웹에 액세스하려면 이 검색 엔진을 조정해야 합니다.

다음 페이지에서 사용자 지정을 클릭합니다.

CSE 만들기

기본에서 검색 요청을 보내는 데 사용되는 검색 엔진 ID와 같은 몇 가지 필수 데이터를 찾을 수 있습니다. 검색 엔진 ID를 복사하여 저장합니다.

검색 기능까지 아래로 스크롤하고 전체 웹 검색 옵션을 켭니다.

검색할 사이트 섹션에서 추가된 URL의 확인란을 선택하고 삭제합니다. 이렇게 하면 검색 엔진이 전체 웹에 공개됩니다.

CSE 수정

맞춤 검색 엔진이 생성되면 Python에서 Google 검색 API를 사용할 차례입니다.

먼저 생성된 검색 엔진에 대한 API를 가져와야 합니다.

Google API 키 받기

Google의 API(애플리케이션 프로그래밍 인터페이스)는 Google 서비스를 타사 애플리케이션에 삽입하기 위한 Google Cloud의 기능입니다. 사용자 지정 검색 API 키를 가져와 Python에서 Google 검색 API로 사용하려면 Google 프로젝트를 생성해야 합니다.

맞춤 검색 엔진용 API 키를 가져오는 방법에는 두 가지가 있습니다.

  1. Google Cloud에서 프로젝트를 생성하고 Google Custom Search API를 받습니다.
  2. JSON API 키를 가져옵니다.

두 단계 모두 Google Cloud 프로젝트가 필요합니다.

Google Cloud에서 프로젝트를 만들고 Google Custom Search API 받기

Google Cloud의 자격 증명 페이지로 이동합니다. 그런 다음 새 프로젝트를 클릭합니다.

Google 클라우드 - 새 프로젝트

이름을 지정하고 조직 상자를 그대로 둡니다. 그런 다음 만들기를 클릭합니다.

Google Cloud - 만들기 클릭

프로젝트를 생성한 후 이 프로젝트에 사용자 정의 검색 API를 연결해야 합니다. 왼쪽 패널에서 Credentials를 선택한 다음 상단의 Create Credentials 버튼을 클릭합니다.

Create Credentials에서 API 키를 선택합니다.

Google 클라우드 - 자격 증명 API 키

API 키 옵션을 선택하면 프로젝트에 대한 API 키가 생성됩니다. 키 표시를 클릭하여 API 키를 복사합니다.

Google 클라우드 - API 키 생성됨

이 메소드에서 가져온 API 키는 비활성 상태입니다. 이 API 키가 포함된 Python 스크립트를 실행할 때 수동으로 활성화할 수 있습니다.

활성화 프롬프트는 스크립트가 처음 실행될 때 Python에서 발생합니다. API 키를 활성화하면 맞춤 검색 엔진을 사용할 수 있습니다.

JSON API 키 받기

이 방법은 키 활성화가 필요하지 않으므로 비교적 간단합니다. Google Cloud 프로젝트가 이미 있는 경우 이 메서드에서 API 키를 직접 가져올 수 있습니다.

프로그래밍 가능한 검색 엔진 웹사이트의 안내 페이지로 이동합니다.

키 가져오기 버튼을 클릭하여 프로젝트를 선택하라는 팝업을 엽니다.

Google Cloud - JSON API Get Key

프로젝트를 클릭하고 다음을 선택하여 프로젝트에 대한 API를 생성합니다.

JSON API - 프로젝트 선택

키 표시를 클릭하여 API 키를 가져옵니다.

Google 클라우드 - JSON API 표시 키

이 JSON API 키는 직접 사용할 수 있지만 Google Cloud의 Credentials 탭을 통해 수동으로 가져온 API 키는 활성화해야 합니다.

Python에서 맞춤 검색 API 구현

CSE ID와 API 키가 준비되면 스크립트 내에서 Python의 Google 검색 API를 사용할 수 있습니다. 프로세스를 설명하는 두 개의 프로그램이 아래에 있습니다.

예 1:

Python의 Google 검색 API가 작동하려면 API 키를 구문 분석하기 위한 Python 라이브러리가 필요합니다. Google API Python 클라이언트를 사용할 수 있습니다.

설치하려면 Python을 실행하는 CMD 또는 IDE로 이동하여 Google API Python 클라이언트를 설치합니다.

CMD 내부에서 다음 명령을 작성하십시오.

pip install google-api-python-client

이렇게 하면 Python 패키지가 시스템에 설치됩니다.

사용자 지정 검색 엔진에 검색 쿼리를 보내고 결과를 반환하는 Python 스크립트를 만들어야 합니다.

코드- custom_search_engine.py:

from googleapiclient.discovery import build

my_api_key = "The API_KEY you acquired"
my_cse_id = "The search-engine-ID you created"


def google_search(search_term, api_key, cse_id, **kwargs):
    service = build("customsearch", "v1", developerKey=api_key)
    res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
    return res["items"]


results = google_search('"How to code in Python"', my_api_key, my_cse_id, num=10)
for result in results:
    print(result)

코드가 무엇을 하는지 이해하기 위해 코드를 분석해 봅시다. 코드의 첫 번째 줄은 Python 라이브러리 패키지 google api python client에서 build 모듈을 가져옵니다.

API 키와 사용자 지정 검색 엔진 ID를 각각 저장하는 두 개의 객체 변수 my_api_keymy_cse_id가 생성되었습니다.

메소드 google_search는 검색어를 저장하는 search_term, API 키를 전달하기 위한 api_key, 맞춤 검색 엔진의 ID를 전달하기 위한 cse_id, 마지막으로 키워드 인수 **라는 네 가지 매개변수로 생성됩니다. 콰르그.

아래 코드는 build 기능을 사용하여 사용자 정의 검색 엔진에 맞는 customsearch API 서비스를 생성하는 service 변수를 생성합니다.

service = build("customsearch", "v1", developerKey=api_key)

다음 줄은 service.cse() 모듈을 사용하여 검색 쿼리를 사용자 지정 검색 엔진에 보내고 rex 변수에 저장하는 클라이언트를 생성합니다.

list(q=search_term, cx=cse_id, **kwargs)는 검색어에서 가져온 결과 목록을 생성합니다. 여기서 **kwargs는 검색어에서 반환되는 검색어 수를 제한하는 데 사용됩니다. 고객.

res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()

마지막으로 변수 rex가 검색 결과 목록과 함께 배열로 반환됩니다.

마지막으로 검색 결과를 저장하기 위해 result 변수가 생성됩니다. 메소드 google_search는 검색 쿼리를 첫 번째 매개변수로 사용하여 호출됩니다. 그런 다음 API 키, CSE ID 및 다음 매개변수에 대한 검색 반복 횟수입니다.

반환된 목록은 result 변수에 저장됩니다. for 루프 내부에는 해당 길이까지 인쇄됩니다.

results = google_search('"How to code in Python"', my_api_key, my_cse_id, num=10)
for result in results:
    print(result)

출력:

Python 사용자 지정 검색 API 구현 - 출력 1

예 2:

이 예에서는 외부 종속성을 사용하지 않고 검색 요청을 보내는 Python 스크립트를 만듭니다. 이 프로그램은 API 키와 CSE ID를 사용하고 Python의 Google 검색 API와 함께 내장된 Python 라이브러리를 사용하는 클라이언트를 생성합니다.

암호:

import requests

API_KEY = "Your API Key"

SEARCH_ENGINE_ID = "Your CSE ID"

# the search query you want
query = "Starboy"
# using the first page
page = 1
# construct the URL
# doc: https://developers.google.com/custom-search/v1/using_rest
# calculating start, (page=2) => (start=11), (page=3) => (start=21)
start = (page - 1) * 10 + 1
url = f"https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&q={query}&start={start}"

# make the API request
data = requests.get(url).json()

# get the result
search_items = data.get("items")
# iterate over 10 results
for i, search_item in enumerate(search_items, start=1):
    try:
        long_description = search_item["pagemap"]["metatags"][0]["og:description"]
    except KeyError:
        long_description = "N/A"
    # get the title of the page
    title = search_item.get("title")
    # get the page snippet
    snippet = search_item.get("snippet")
    # alternatively, you also can get the HTML snippet (bolded keywords)
    html_snippet = search_item.get("htmlSnippet")
    # extract page url
    link = search_item.get("link")
    # print results
    print("=" * 10, f"Result #{i+start-1}", "=" * 10)
    print("Title:", title)
    print("Description:", snippet)
    print("Long description:", long_description)
    print("URL:", link, "\n")

위의 코드가 무엇을 하는지 이해해 봅시다.

첫 번째 줄은 Python HTTP 라이브러리 requests를 가져옵니다. 이전에 생성된 자격 증명을 저장하는 API_KEYSEARCH_ENGINE_ID라는 두 변수가 초기화됩니다.

import requests

API_KEY = "Your API Key"
SEARCH_ENGINE_ID = "Your CSE ID"

query 변수는 애플리케이션이 찾을 검색어를 저장하는 데 사용됩니다. page 변수는 특정 페이지의 검색 결과를 표시하고 start 변수는 해당 페이지의 결과 순서를 나타냅니다.

예를 들어 모든 페이지에는 10개의 검색 결과가 있습니다. 변수 startpage = 1이 있는 경우 첫 번째 페이지를 의미하는 처음 10개의 검색 결과를 표시하고 page = 2는 검색 결과에 이어 10번째 결과를 표시하므로 11번째부터 시작하는 결과를 의미합니다. .

url 변수는 맞춤 검색 엔진에서 검색 결과를 가져오는 데 사용되는 서비스 URL을 저장합니다. API 키, 검색 쿼리 및 표시할 검색 결과의 페이지 번호와 같은 자격 증명을 저장합니다.

query = "Starboy"
page = 1
start = (page - 1) * 10 + 1
url = f"https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={SEARCH_ENGINE_ID}&q={query}&start={start}"

이 프로그램은 requests 기능을 사용하여 API 요청을 저장된 URL로 보내고 API 호출에서 반환된 데이터를 data 변수에 저장합니다.

search_items 변수는 검색 항목을 가져오는 데 사용됩니다. 첫 번째 요소에서 시작하여 해당 길이까지 실행되는 for 루프 안에 배치됩니다.

검색되는 첫 번째 요소는 예외 처리 블록 내부에 배치되는 결과 설명입니다.

프로그램이 설명을 찾으면 long_description 변수에 저장됩니다. 아무것도 반환되지 않은 경우 N/A를 저장합니다.

data = requests.get(url).json()
search_items = data.get("items")
for i, search_item in enumerate(search_items, start=1):
    try:
        long_description = search_item["pagemap"]["metatags"][0]["og:description"]
    except KeyError:
        long_description = "N/A"

아래 코드에서 각 검색 결과의 속성은 해당 이름의 변수에 저장됩니다. 이 과정은 모든 검색 결과에 대해 10번 반복됩니다.

title = search_item.get("title")
snippet = search_item.get("snippet")
html_snippet = search_item.get("htmlSnippet")
link = search_item.get("link")

마지막으로 모든 결과가 인쇄됩니다. 첫 번째 줄에는 결과의 번호와 제목, 설명 등과 같은 속성이 인쇄됩니다.

print("=" * 10, f"Result #{i+start-1}", "=" * 10)
print("Title:", title)
print("Description:", snippet)
print("Long description:", long_description)
print("URL:", link, "\n")

결과는 외부 종속성 없이 Python에서 Google 검색 API를 사용하여 인쇄됩니다.

출력:

Python 사용자 지정 검색 API 구현 - 출력 2

결론

이 기사에서는 Python에서 Google 검색 API를 사용하여 사용자 지정 검색 엔진에 검색 쿼리를 보내는 클라이언트를 만드는 방법에 대해 설명했습니다. 독자는 맞춤 검색 엔진을 만들고 API 키를 가져오고 검색 요청을 보내는 Python 스크립트를 쉽게 만들 수 있습니다.