TechNOTE

Python Selenium Crawler For Freitag : 갖고 싶은 거에 진심인 편.. 본문

일상

Python Selenium Crawler For Freitag : 갖고 싶은 거에 진심인 편..

JU1234 2021. 3. 12. 21:23

서론 (안읽어도 됨)

연구실 가던 중 1층에서.. 어떤 분이 멘 가방을 봤는데 너무 예뻤다.... 

때마침 잔고에 여유도 있어서 나도 바로 사야겠다고 결심을 했다!! 

이라는 브랜드의 가방인데.. 이럴 수가 서치를 해 본 결과 

세상에 하나밖에 없는 디자인 + 업사이클링 브랜드 라는 것이다~~ 와 환경도 보호하고 정말 좋다 

그런데 문제는 ... ㅜ_ㅜ 내가 사고 싶은 디자인을 사려면 사이트를 계속해서 새로고침해서 들어가서 가장 먼저 결제하는 수고를 거쳐야 했다.. 

내가 사고 싶은 모델은 프라이탁의 덱스터. 

www.freitag.ch/en/f14

 

F14 DEXTER | FREITAG

Trucks are tough. Which is why all FREITAG products are tough. All the same, you shouldn't put them in your mouth. Let’s face it, trucks taste pretty yucky.

www.freitag.ch

내 13인치 맥북이 들어가는 메신저백을 사고 싶어서 덱스터를 골랐다. 

이틀간의 존버 끝에 내 맘에 드는 디자인을 발견하고 바로 결제에 임할 수 있었는데, 이럴 수가........ 

프라이탁은 결제가 완료되었을 때 결제 상품의 상세컷을 열람할수 없는 시스템을 가지고 있었다.. 그래서 내가 주문한 물품의 디자인을 확인할 수 가 없는 것 ㅜㅜ (사기 전에 대충 봐서 확신이 없었다..)

아마 결제 취소하는 사람들이 많아질까봐 그런 것 같았는데.. 가격도 엄청 비싸면서 이런것도 잘 안되어있구.. 에휴 정말 실망을 금치못했다.... 그래서 결국 결제 취소 이메일을 보냈다. 아니 사이트도 정말 이상해서 사이트에서 취소도 안되구... 

이런 메일을 받았다. 

또다시 이틀동안 프라이탁에 매달리는 그런 수고를 할 수는 없어서.. 크롤러를 짜기로 했다 (여태까지 서론이었음)

크롤러는? 

셀레니움을 이용하기로 결정... 

개발자 도구를 열어서 이미지의 tag를 파악해 준다. 

그리고 해당 링크 가져와서 element 의 src 저장할 수 있도록 설정 

def get_new_items():
    driver = webdriver.Chrome('./chromedriver')
    url = 'https://www.freitag.ch/en/f14'
    driver.get(url)

    new_items = []
    for item in driver.find_elements_by_css_selector('#block-freitag-content > article > section:nth-child(2) > div > div > div > div > div > div > div > div > div > div.flex.flex-wrap > div:nth-child(n) > div > img'):
        image_src = item.get_attribute('src')
        if image_src not in curr_items:
            new_items.append(image_src)
            curr_items.append(image_src)
    return new_items

다음과 같이 src image link를 확인할 수 있다. ^^ 

이렇게 확인할 수 있구.. 카카오톡 메시지가 오도록 만들어 보자. 

카카오톡 연동 

ㅎㅎㅎㅎ 개발자 센터 가입해서 인증 키 만들어준다.. 이부분은 다른데 검색하면 나오니까 패스 
일단 앱 하나 만들고.. 이 부분은 하나하나 캡쳐하기가 너무 귀찮아서 .. 

이대로 api 를 날리면 된다구 한다. 

난 리스트를 이용하여 프라이탁 이미지들이 한번에 쫙 뜨도록 할 거다. (근데 해보니까 3개씩밖에 안떠서 3개씩 짤라서 보내도록 코드 짤 것..) 일단 보내는 api 함수 

def send_api(lists):
    url = "https://kapi.kakao.com/v2/api/talk/memo/default/send"

    headers = {
        "Authorization": "Bearer " +  "access code"
    }

    lists = [{"title": '가방', 
              "description": '새로운거',
              "image_url": str(elem),
              "image_width" : 50, "image_height" : 50,
              "link": {
                  "web_url": "www.freitag.ch/en/f14"
              }} for elem in lists]

    template = {
        "object_type" : "list",
        "header_title" : "dexter",
        "header_link" : {
            "web_url" : "www.freitag.ch/en/f14",
            "mobile_web_url" : "www.freitag.ch/en/f14"
        },
        "contents" : lists,
        "buttons" : [
            {
                "title" : "웹으로 이동",
                "link" : {
                    "web_url" : "www.freitag.ch/en/f14",
                    "mobile_web_url" : "www.freitag.ch/en/f14"
                }
            }
        ]
        
    }

    data = {
        "template_object" : json.dumps(template)
    }

    response = requests.post(url, data=data, headers=headers)
    if response.json().get('result_code') == 0:
        print('Success!')
    else:
        print('Failed. Error Message: ' + str(response.json()))

시간마다 크롤 & 호출하게 만들기 

일단 3개씩 잘라서 보내주는 함수 그리고 5분마다 실행되도록 했다. threading library 이용 

def call():
    new_items = get_new_items()
    print('called')
    if new_items:
        for i in range(0, len(new_items)//3+1):
            if new_items[i*3:(i+1)*3]:
                send_api(new_items[i*3:(i+1)*3])
    else:
        print('Nothing New')
    
    threading.Timer(300,call).start()

 

결과물 

 

이제 새로운게 업데이트 된다면 이렇게 나에게 메시지가 온다 ^_^ 제발.. 

내 맘에 쏙 드는 예쁜 가방 살수 있길 기원한다.. 

github.com/juheeuu/freitag-crawler

 

juheeuu/freitag-crawler

notice for the freitag-new product . Contribute to juheeuu/freitag-crawler development by creating an account on GitHub.

github.com

코드는 여기에 ㅎㅎ 

예쁜 가방을 살 수 있기를 PLZ~~

Reference 

[1] hyongdoc.tistory.com/413

[2] ai-creator.tistory.com/23

반응형

'일상' 카테고리의 다른 글

애플워치 se 고장 수리 후기  (2) 2021.08.25
브리타 정수기 후기  (1) 2021.03.22
아이폰 12 미니 자급제 후기  (2) 2020.11.26
애플워치 SE VS 애플워치 6  (0) 2020.10.14
Comments