Buttercoco

반응형

안녕하세요 코코넛입니다. 이번에는 크롤링 관련 세미나를 진행하면서 정리한 자료를 포스팅하게 되었습니다.

세미나를 진행하면서 사용한 ppt를 포스팅에서 그대로 사용하였습니다.

자 이제 시작합니다!

순서는 간단하게 왜 어떻게 하는지에 대한 이유와 실생활에서 쓰이는 예시,

그리고 전체적인 흐름 및 실행을 다루고 있습니다.

크롤링은 자신의 원하는 정보를 웹페이지에서 가져오는 행위 또는 작업의 의미로 일컬어 집니다.

흔한 예로 구글의 검색엔진에 우리가 검색해서 나오는 정보들도 모두 구글의 봇이 크롤링을 하여서 얻어진

정보입니다.

자사의 제품의 정보를 보통은 오픈 마켓에 제공을 하지만 그 외 제품의 정보를 크롤링하여 가져오기도 합니다.

참고로 크롤링한 정보를 상업적으로 사용하려면 정보를 제공하는 측의 허가를 먼저 얻어야 합니다.

API를 통해 얻어오지 못하는 정보도 크롤링으로 얻어올 수 있지요~

크롤링 도구가 있어야 크롤링을 할 수 있겠죠~!

먼저 크롤링할 웹페이지에 접속, 정보선택 후 정보를 가져옵니다. 그 후에 필요한 정보를 파싱하여 사용 혹은 저장!

여기서는 실행할 예시에 셀레늄을 사용하고 있습니다.

가져올 정보의 인덱스를 책갈피에 빗대어 설명을 하였습니다.

실행할 예시입니다.

용어 정리!

실행에 사용한 예제 코드도 첨부하였습니다.

#-*- coding: utf-8 -*-
from selenium import webdriver
from bs4 import BeautifulSoup as bs
import time

search_keyword = "초코파이"

# 크롤링 도구
driver = webdriver.Chrome('/Users/yutaewoong/Downloads/chromedriver')
driver.implicitly_wait(3)
time.sleep(5)


# 오픈마켓 접속
driver.get('http://www.auction.co.kr/')
time.sleep(5)


# 상품 검색
driver.find_element_by_xpath("//*[@class='search_input_keyword']").send_keys(search_keyword)
time.sleep(3)
driver.find_element_by_xpath("//*[@class='search_btn_ok']").click()
time.sleep(5)


# 상품리스트 가져오기
html = driver.page_source
soup = bs(html, 'html.parser')
itemlist = soup.findAll("div", {"class": "section--itemcard"})
time.sleep(10)


# 가져온 상품리스트에서 필요한 상품명, 가격, 상품링크를 출력!!
for item in itemlist:
    title = item.find("span", {"class": "text--title"}).text
    price = item.find("strong", {"class": "text--price_seller"}).text
    link = item.find("span", {"class": "text--itemcard_title ellipsis"}).a['href']
    print("상품명 : " + title)
    print("가격 : " + price + "원")
    print("상품 링크 : " + link)
    print("------------------------")

time.sleep(10)

driver.close()

여기까지 간단히 소개를 마치겠습니다.

여러분께 도움이 되기를 바라겠습니다~~


반응형

안녕하세요, coconut입니다 이번에는 파이썬을 이용한 엑셀 읽고 쓰기를 알려드리려 합니다.

일단 지금 포스팅에서 쓰이는 라이브러리는 .xls만 지원한다는 점에 유의해 주시기 바랍니다.

.xlsx를 기대하고 찾으신 분은 아쉽지만 다른 블로그를 참고해 주시기 바랍니다.

 

바로 들어갑니다. 일단 .xls 읽어와  datadict에 저장하기

# -*- coding: utf-8 -*-
import xlrd

# 읽기 라이브러리를 통해 현재 같은 디렉터리상에 있는 test.xls를 불러와 workbook에 할당합니다.
workbook = xlrd.open_workbook('test.xls')

# 워크북에 할당된 엑셀 데이터의 첫번째시트를 불러옵니다.
worksheet = workbook.sheet_by_index(0)

# nrows에 불러온 첫번째 시트의 행수를 불러옵니다.
nrows = worksheet.nrows

# 불러온 데이터를 저장할 딕셔너리를 선언합니다.
datadict = {}

# 행수만큼의 for loop 를 돌려서 행단위로 데이터를 불러와 datadict에 저장합니다.
for row_num in range(nrows):
    datadict[row_num] = {}
    # field_cnt는 열의 개수입니다. 열갯수는 여러분이 지정하시면 됩니다.
    for col in range(field_cnt):
        # datadict[row_num]에 열숫자별로 셀데이터를 저장합니다.
        datadict[row_num][col] = worksheet.cell_value(row_num, col)

 

다음은 엑셀 쓰기

workbookw = xlwt.Workbook(encoding='utf-8')  # utf-8 인코딩 방식의 workbook 생성

workbookw.default_style.font.height = 20 * 11
worksheetw = workbookw.add_sheet('시트 이름')  # 시트 생성


# 2번째 행부터 데이터를 입력합니다.
for row_num in range(nrows):
    for col in range(field_cnt):
        worksheetw.write(row_num, col, datadict[row_num][col])

# 할당된 데이터셋을 'result.xls'로 저장합니다.
workbookw.save("result.xls")

 

여기까지 간단한 파이썬 엑셀파일 읽고 쓰기였습니다.


반응형

안녕하세요 이번에는 python 코드를 서버없이 실행할 수 있게 해주는 zappa를

사용하는 방법을 소개하겠습니다.

 

우선 zappa에 관해 간단히 설명을 하겠습니다.

최근들어 aws, azure, gcp 같은 클라우드 플랫폼 서비스에서 서버리스 제품이 출시되고 있는데요,

서버리스란 말 그대로 프로덕트를 서버에서 실행시키지 않고, 자원을 분산시켜 함수는 함수대로 DB는

DB대로 각각 나누어 연동시켜 프로덕트를 동작하게 한다고 할 수 있습니다.

그중에서도 저는 파이썬 패키지로 작성된 서버리스 도구인 zappa를 소개하려고 합니다.

 

우선 zappa를 설치하는 방법은 각자 자신이 사용하는 파이썬 환경에서

pip install zappa

를 실행하여 주면 됩니다.

현재 zappa는 파이썬 2.7 과 3.6 에서 지원이 되니 참고해 주세요.

 

간단한 python 모듈을  zappa로 실행시켜 보겠습니다.

myapp.py

# -*- coding: utf-8 -*-
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World! Hello everyone!"

if __name__ == "__main__":
    app.run()

 

myapp.py를 이런식으로 작성한 뒤

zappa init

명령을 내려줍니다.

 

aws에 로그인하여 IAM에 접속하여 사용자를 추가해 줍니다.

사용자를 추가할 때 aws_access_key_id와 aws_secret_access_key를 얻을 수 있습니다.

그 키를 ~/.aws/credentials 파일이 아래와 같이 저장해 줍니다.

[default]
aws_access_key_id=xxxxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 

zappa init를 통해 만들어진 zappa_settings.json 파일을 수정하여 클라우드 서버 환경을 연동시킬 수 있습니다.

예제

{
    "dev": {
        "app_function": "myapp.app",
        "aws_region": "ap-northeast-2",
        "profile_name": "default",
        "project_name": "test",
        "runtime": "python3.6",
        "s3_bucket": "test_bucketname"
    }
}

이제 zappa_settings.json이 존재하는 경로상에서

zappa deploy dev

로 aws 상에서 배포를 하면 끝납니다.

 

소스를 고치면 다른 명령어로 배포를 할 수 있습니다.

zappa update dev

 

여기까지 간단한 zappa 사용법이었습니다. 끝!