Day 047

AWESOMee·2022년 3월 21일
0

Udemy Python Bootcamp

목록 보기
47/64
post-thumbnail

Udemy Python Bootcamp Day 047

Automated E-mart Price Tracker

Use BeautifulSoup to Scrape the Product Price

import requests
from bs4 import BeautifulSoup

response = requests.get("https://emart.ssg.com/obanjang/main.ssg?myclick=1000040579314&clickIcon=1000040579314#1000040579314")
# print(response.text)

soup = BeautifulSoup(response.content, "html.parser")
result = soup.find(name="span", class_="obj_price_num ssg_price")
product_price = result.getText().split(",")
price = int(product_price[0] + product_price[1])

아마존페이지는 robot인지 체크?하는 것 때문인지 값추출이 안됐음..
질의응답 보니까 다들 그냥 건너뛰어서 다음 section에서 selenium배우라고 하고,
아니면 월마트 ㅋㅋㅋ에서 하니까 금방 했다고 하길래
월마트 들어가봤더니 아마존이랑 똑같이 나오길래 혹시나..?하고 이마트로 했더니 바로 되는겨,,
다만 가격 중간에 ,가 들어가서 조금 코드가 안예쁘긴 하지만,,
이 방법말고 다른 방법 있으려나..?

+) 2022.03.22
사실 이미 배웠겠지만 잊은.... .replace(",", "") 사용했으면 좀더 깔끔했겠다!!

product_price = result.getText().replace(",", "")

대신 아래 이메일 코드가 조금 달라짐,, FINAL에서 첨부

Email Alert When Price Below Preset Value

import smtplib

MY_EMAIL = "**********@yahoo.com"
MY_PASSWORD = "*********"

if price < 10000:
    with smtplib.SMTP("smtp.mail.yahoo.com") as connection:
        connection.starttls()
        connection.login(MY_EMAIL, MY_PASSWORD)
        connection.sendmail(
            from_addr=MY_EMAIL,
            to_addrs="*************@gmail.com",
            msg=f"Subject:Price Alert\n\nThe price is {product_price[0]},{product_price[1]}won now!"
        )

smtp는 손쉽게 했구,, 근데 사실 smtp는 msg내용만 달라지는 거라 다른 플젝에서 복붙해서 쓰는데,,
사실 복붙 안하고 생으로 쓰라고 하면 못쓸거 같긴함.. 이 습관 고치긴 해야하는데,,

암튼 로봇인지 체크안하는 이마트 덕에 손쉽게 플젝 마무리했는데
다음 section에서 selenium배워서 아마존 다시 해보는걸로 합시다.

FIANL

import requests
from bs4 import BeautifulSoup
import smtplib

MY_EMAIL = "test525awesome@yahoo.com"
MY_PASSWORD = "fatcplygxzmveyck"

response = requests.get("https://emart.ssg.com/obanjang/main.ssg?myclick=1000040579314&clickIcon=1000040579314#1000040579314")
# print(response.text)

soup = BeautifulSoup(response.content, "html.parser")
result = soup.find(name="span", class_="obj_price_num ssg_price")
product_price = result.getText().replace(",", "")

if int(product_price) < 10000:
    with smtplib.SMTP("smtp.mail.yahoo.com") as connection:
        connection.starttls()
        connection.login(MY_EMAIL, MY_PASSWORD)
        connection.sendmail(
            from_addr=MY_EMAIL,
            to_addrs="test0525awesome@gmail.com",
            msg=f"Subject:Price Alert\n\nThe price is {result.getText()}won now!"
        )

근데 사실 이렇게만 보내면 가격만 딸랑 와서 어떤 상품인지 알수가 없는ㅋㅋㅋ
(특정 상품이 아니라 오반장(오늘 할인 어쩌구)이라서 ㅋㅋ)
상품 이름도 추출해서 같이 메일보내면 좋겠다 그래

profile
개발을 배우는 듯 하면서도

0개의 댓글