본문 바로가기

Programming

[프로그램 제작 1단계] 웹 크롤링 프로그램 만들기 / Python Web crawling program

728x90
반응형

해당 코드는 3일 전의 구글 검색 결과 페이지에서 검색어를 추출하여 상위 5개 검색어를 출력하는 파이썬 프로그램입니다. 이를 위해 datetime 모듈로 날짜 계산, requests 모듈로 HTTP 요청, Beautiful Soup 4 라이브러리로 HTML 소스 코드 분석, 상위 5개 검색어를 출력합니다.

1. 기획

아래의 기획을 거쳐서 첫번째 단계의 프로그램을 구성하였다.

 

[프로그램 기획] 구글에서 3일 안에 가장 많이 검색된 주제를 찾는 Python programe 만들기 <기획-제작

Python으로 구글에서 가장 검색 많이 된 주제를 가져오는 프로그램을 만들기 위해서는 웹 크롤링 프레임워크를 선택하고, 크롤링할 데이터를 결정하여 가져오는 것이 첫 단계이다. 그 후, 데이터

jin-t.tistory.com

 

2. 프로그램 파이썬 환경구성

먼저 본인의 IDLE에 beautifulsoup4를 설치한다.

pip install beautifulsoup4

3. 프로그램 작성

파이썬 프로그램을 작성한다.

import requests
from bs4 import BeautifulSoup
from datetime import datetime, timedelta

# 3일 전의 날짜 계산
now = datetime.now()
days_ago = (now - timedelta(days=3)).strftime('%Y-%m-%d')

# Google 검색 결과 페이지 URL
url = f'https://www.google.com/search?q=&tbs=qdr:d&source=lnt&sa=X&ved=0ahUKEwirpM6f77z6AhXUyYsBHa1hC5QQpwUIFA&biw=1366&bih=657&dpr=1'

# HTTP 요청 보내기
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')

# 검색어 추출하기
keywords = []
for link in soup.find_all('a'):
    url = link.get('href')
    if url.startswith('/url?q='):
        keyword = url.split('/url?q=')[1].split('&')[0]
        if keyword.startswith('http') or keyword.startswith('www'):
            continue
        else:
            keywords.append(keyword)

# 상위 5개 검색어 출력하기
top_keywords = sorted(keywords, key=keywords.count, reverse=True)[:5]
print(top_keywords)

3. 자가 평가 및 개선사항

 (1) 위 url로 가면 그냥 구글 검색 창만 떠있다. 아무 일도 일어나지 않음

구글 검색 창

  --> Google API 접속을 직접 해서 받아올 수 있도록 해야겠다.

(2) 코드 수정

import requests

# Google Custom Search API 요청 URL
url = "https://www.googleapis.com/customsearch/v1"

# API 키, 검색 엔진 ID, 검색어 설정
params = {
    "key": "YOUR_API_KEY",
    "cx": "YOUR_SEARCH_ENGINE_ID",
    "q": "",
    "sort": "",
    "dateRestrict": "d3",  # 최근 3일 검색 결과
}

# API 요청 보내기
res = requests.get(url, params=params)
data = res.json()

# 검색어 추출하기
keywords = [item["title"] for item in data.get("items", [])]

# 상위 5개 검색어 출력하기
top_keywords = sorted(keywords, key=keywords.count, reverse=True)[:5]
print(top_keywords)

 

 

728x90
반응형