본문 바로가기

[업무 지식]/Crawling35

[네이버 뉴스] '이커머스' 검색 타이틀 크롤링 라이브러리 임포트import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport timeimport schedule 코드import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport timefrom datetime import datetimeimport schedule# 기존 데이터프레임 로드 (없으면 새로 생성)try: df = pd.read_csv('ecommerce_news.csv', encoding='utf-8', index_col=0)except FileNotFoundError: df = pd.DataFrame(columns=['Title', 'Press', 'L.. 2025. 1. 6.
[ETL] ETL(Extract, Transform, Load) 프로세스 스케줄링 모듈 호출https://yoonsll.tistory.com/280 [ETL] Weather, MySQL 클래스를 객체화패키지 불러오기from etl_module.connectors.weather_api import WeatherApiClient # 별도 생성한 클래스. 하단 etl_module 폴더에 코드 작성from etl_module.connectors.mysql import MySqlClient # 별도 생성한 클래스. 하단 etl_moduleyoonsll.tistory.com위 링크 이어서 진행from dotenv import load_dotenvimport osfrom datetime import datetimefrom etl_module.connectors.weather_api import W.. 2025. 1. 3.
[서울시 열린데이터] 서울시 상권분석서비스(소득소비-상권) 인증키 신청(생략) 및 URL 확인라이브러리 호출import requestsimport pprintimport jsonimport pandas as pdfrom dotenv import load_dotenvimport os API 데이터 요청(JSON)# .env 파일 로드load_dotenv()# 환경 변수에서 API 키 가져오기SEOUL_API = os.getenv('SEOUL_API')# API 요청 URL 설정# URL 중 XML -> JSON으로 변경base_url = "http://openapi.seoul.go.kr:8088"endpoint = f"{base_url}/{SEOUL_API}/json/trdarNcmCnsmp/1/1000/20241"try: response = requests.. 2025. 1. 3.
[NAVER API] 쇼핑인사이트 라이브러리 호출import requestsimport jsonimport pprintfrom dotenv import load_dotenvimport osimport pandas as pdimport matplotlib.pyplot as pltload_dotenv()•`requests`: •HTTP 요청을 보내기 위한 Python 라이브러리입니다. •여기서는 `POST` 요청을 통해 네이버 쇼핑인사이트 API에 데이터를 요청합니다.•`json`: •JSON 형식의 데이터를 다루기 위한 라이브러리입니다. •요청 본문(payload)을 JSON으로 변환하거나 응답 데이터를 JSON으로 처리합니다.•`pprint`: •데이터를 사람이 읽기 쉽게 출력하기 위한 라이브러리입니다. •JSON 응답 데이터를 보기 좋.. 2025. 1. 3.
[Selenium] CGV review Crawling 라이브러리 import#pip install selenium# 크롬브라우저 업데이트 될 때마다 driver 재설치를 하지 않기 위해 설치#pip install webdriver-manager from selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom selenium import webdriverfrom selenium.webdriver.chrome.servic.. 2025. 1. 3.
[ETL] Weather, MySQL 클래스를 객체화 패키지 불러오기from etl_module.connectors.weather_api import WeatherApiClient # 별도 생성한 클래스. 하단 etl_module 폴더에 코드 작성from etl_module.connectors.mysql import MySqlClient # 별도 생성한 클래스. 하단 etl_module 폴더에 코드 작성import pandas as pd import osfrom dotenv import load_dotenvload_dotenv() 기존 환경변수(.env) 변경 시 코드from dotenv import load_dotenvfrom dotenv import dotenv_values# 기존 환경 변수 제거os.environ.pop('API_KEY', None)o.. 2025. 1. 2.
[geocode] GeoJSON의 내용을 출력하는 HTML 파이썬 서버 오픈!python -m http.server 오픈 주소 입력http://localhost:8000/korea_museum.html 2025. 1. 2.
[geocode] 지오코딩으로 위치 정보 추출하기 하나의 위치 정보 추출하기from dotenv import load_dotenvimport osimport requestsload_dotenv()GOOGLE_API_ID = os.getenv('GOOGLE_API_ID')# API 요청 URL 생성base_url = "https://maps.googleapis.com/maps/api/geocode/json"address = "강원도 고성군 현내면 통일전망대로 20"params = { "address": address, "key": GOOGLE_API_ID, "language": "ko" # 응답을 한국어로 설정}# API 호출response = requests.get(base_url, params=params)# 응답 처리if respo.. 2025. 1. 2.
[selenium] 네이버페이 주문 이력 추출하기 import osimport timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom dotenv import load_dotenvloa.. 2025. 1. 2.
[Selenuim] 구글 검색하기 selenium 기본 사용 방법# 제목 추출하기>>> driver.find_elements_by_css_selector('.store_product_info_box')# 하나의 DOM 요소는 WebElement 객체에 대응합니다.>>> div = driver.find_elements_by_css_selector('.store_product_info_box')[0]# 속성을 추출할 때는 get_attribute() 메서드를 사용합니다.>>> div.get_attribute('class')# 요소 내부에서 요소를 추가로 탐색할 수도 있습니다.>>> div.find_elements_by_css_selector('h3')# 내부의 글자를 추출할 때는 text 속성을 사용합니다.>>> h3.text  from .. 2025. 1. 2.
[MySQL] 연결 및 테이블 조작 MySQL 테이블 구조 설정 및 테이블 생성engine = create_engine(connection_url)table_name = 'daily_weather'# 테이블에 대한 Metadata 설정 metadata = MetaData()table = Table( table_name, metadata, Column('dt', String(8), nullable=False, primary_key=True), # 'dt'는 문자열이며 기본 키로 설정됨 (고유값) Column('time', String(6), nullable=False, primary_key=True), # 'time'는 문자열이며 기본 키로 설정됨 (고유값) Column('measured_at', DateTime, .. 2025. 1. 1.
[youtube] 유튜브에서 동영상 정보 수집하기 .env 파일에 YOUTUBE_API_KEY 선언Google API Client for Python 사용하기import osfrom dotenv import load_dotenv# !pip3 install google-api-python-clientfrom apiclient.discovery import buildload_dotenv()# 환경변수에서 API 키 추출하기YOUTUBE_API_KEY = os.getenv('YOUTUBE_API_KEY')# YouTube API 클라이언트를 생성합니다.# build() 함수의 첫 번째 매개변수에는 API 이름# 두 번째 매개변수에는 API 버전을 지정합니다.# 키워드 매개변수 developerKey에는 API 키를 지정합니다.# 이 함수는 내부적으로 htt.. 2025. 1. 1.
[API 데이터 수집, 활용] 트위터(X)에서 데이터 수집하기 개인계정은 더 이상 api를 사용할 수 없다...# !pip3 install requests-oauthlib# https://api.twitter.com/1.1/statuses/home_timeline.json은 사용자의 타임라인을 나타내는 JSONimport osfrom requests_oauthlib import OAuth1Sessionimport osfrom dotenv import load_dotenvload_dotenv()# 환경변수에서 인증 정보를 추출합니다.CONSUMER_KEY = os.getenv('CONSUMER_KEY')CONSUMER_SECRET = os.getenv('CONSUMER_SECRET')ACCESS_TOKEN = os.getenv('ACCESS_TOKEN')ACCESS_.. 2025. 1. 1.
[변화 감지하기] 크롤링 대상의 변화에 대응하기 정규 표현식으로 가격이 제대로 나오는지 확인하기import revalue = '3,000'# 숫자와 쉼표만을 포함한 정규 표현식에 매치하는지 확인합니다.if not re.search(r'^[0-9,]+$', value): # 값이 제대로 돼 있지 않다면 예외를 발생시킵니다. raise ValueError('Invalid price')Voluptuous로 유효성 검사하기# pip install voluptuousfrom voluptuous import Schema, Match # 다음 4개의 규칙을 가진 스키마를 정의합니다schema = Schema({ # 규칙1: 객체는 dict 자료형 'name': str, # 규칙2:na.. 2025. 1. 1.
[CacheControl] 변경된 데이터만 추출하기 캐시와 관련된 HTTP 헤더HTTP 헤더설명Last-Modified콘텐츠의 최종 변경일을 나타냅니다ETag콘텐츠의 식별자를 나타냅니다. 콘텐츠가 변경되면 ETag의 값도 함께 바뀌게 됩니다Cache-Control콘텐츠를 캐시해도 괜찮은지 등의 캐시 방침을 나타냅니다PragmaCache-Control과 비슷한 것이었지만 현재는 하위 호환성 때문에 남아 있습니다Expires콘텐츠의 유효 기간을 나타냅니다CacheControl을 사용해 캐시 처리하기import requests# pip install CacheControlfrom cachecontrol import CacheControl session = requests.session()# session을 래핑한 cached_session 만들기cached_.. 2025. 1. 1.
[HTTP 통신 오류] HTTP 상태 코드 & 파이썬에서 오류 처리하기 상태 코드설명100 Continue요청이 연결돼 있습니다.200 OK요청이 성공했습니다301 Moved Permanently요청한 리소스가 영구적으로 이동했습니다302 Found요청한 리소스가 일시적으로 이동했습니다.304 Not Modified요청한 리소스가 변경되지 않았습니다400 Bad Request클라리언트의 요청에 문제가 있으므로 처리할 수 없습니다401 Unauthorized인증되지 않았으므로 처리할 수 없습니다403 Forbidden요청이 허가되지 않습니다404 Not Found요청한 리소스가 존재하지 않습니다408 Request Timeout(*)일정 시간 내에 요청이 완료되지 않았습니다500 Internal Server Error(*)서버 내부에 문제가 발생했습니다502 Bad Gatew.. 2025. 1. 1.
[크롤러 만들기] 파이썬으로 크롤러 만들기 목록 페이지에서 URL 목록 추출하기import requestsimport lxml.htmlresponse = requests.get('http://www.hanbit.co.kr/store/books/new_book_list.html')root = lxml.html.fromstring(response.content)for a in root.cssselect('.view_box a'): url = a.get('href') print(url)코드 설명코드에서 `root.cssselect('.view_box a')`는 HTML 문서에서 특정 요소들을 선택하기 위해 CSS 선택자를 사용하는 부분입니다. 여기서 `.view_box a`는 다음과 같은 의미를 가집니다:1. `.view_box`: 클래스 .. 2025. 1. 1.
[MySQL 접속] 파이썬에서 MySQL에 저장하기 !pip3 install pymysqlimport pymysqlpymysql.install_as_MySQLdb()import MySQLdbprint("mysqlclient is installed and working!")import MySQLdb# 데이터베이스 연결 테스트connection = MySQLdb.connect( host="localhost", user="****", passwd="**********", db="scraping")print("Connected to the database successfully!")connection.close() import MySQLdb# MySQL 서버에 접속하고 연결을 변수에 저장합니다.# 사용자 이름과 비밀번호를 지정한 뒤 scra.. 2025. 1. 1.
[RSS 스크레이핑] feedparser로 RSS 스크레이핑하기 import feedparser# 알라딘 도서 RSS를 읽어 들입니다.d = feedparser.parse('http://www.aladin.co.kr/rss/special_new/351')# 항목을 순회합니다.for entry in d.entries: print('이름:', entry.title) print('링크:', entry.link) print() 2024. 12. 31.
[RSS 스크레이핑] feedparser 이해하기 pip install feedparser>>> import feedparser# parse() 함수에 파일 경로, 파일 객체, XML 문자열 등을 지정합니다.>>> d = feedparser.parse('it.rss')# parse() 함수에 URL을 지정하면 피드를 파싱할 수 있습니다.>>> d = feedparser.parse('www.aladin.co.kr/rss/new_all/351')>>> d.version # 피드의 버전을 추출합니다'rss20'》 type(d) # parse() 함수의 반환값은 FeedParserDict 객체입니다.>>> d.feed.title # 피드의 타이틀을 추출합니다.'분야별 신간 특선 - 컴퓨터/모바일'》 d['feed']['title'] # 딕셔너리처럼 사용할 수도.. 2024. 12. 31.