X(트위터) 광고 수익 조건 달성을 위한 트윗 자동화 - 1편
X(트위터)에서 광고 수익을 올리기 위한 전략과 자동화 프로세스를 소개합니다. 트래픽 증가, impressions 달성, 주제 선정 등의 개요를 다룹니다.
Claude를 활용하여 ChatGPT에 크림(Kream)의 HTML을 입력하고, 이를 기반으로 실시간 차트를 크롤링하는 방법을 알아보세요.
<ul>
태그의 HTML을 복사하여 분석을 요청해보겠습니다.셀레니움으로 웹 페이지 데이터를 추출하고자 해. 언어는 Python을 사용해줘. 위 HTML에서 상품 이미지 URL, 상품명, 모델 번호, 사이즈, 가격, 가격 변동, 가격 변동 비율을 가져와줘. 위 항목은 모두 필수 데이터이므로 해당 데이터가 없다면 나에게 어떤 데이터를 찾을 수 없는지 오류 메시지를 전달해야 해. 모든 HTML element는 xpath로 찾아줘. 위 조건을 가지고 JSON 형식으로 데이터를 출력해줘.
find_element_by_xpath
를 지원하지 않기 때문에 다음과 같이 수정을 요청했습니다.내 셀레니움 버전에서는 `find_element_by_xpath`를 사용할 수 없어. `By`를 import해서 `find_element`로 요소를 찾도록 수정해줘.
find_element
와 By
를 사용하도록 수정되었습니다.from selenium import webdriver from selenium.webdriver.common.by import By import json driver = webdriver.Chrome() driver.get("<https://www.example.com>") products = [] items = driver.find_elements(By.XPATH, "//ul[@class='trading-items-container']/li") for item in items: try: img_url = item.find_element(By.XPATH, ".//picture/img").get_attribute("src") except: img_url = "Image URL not found" try: name = item.find_element(By.XPATH, ".//div[contains(@class,'name')]").text except: name = "Name not found" try: code = item.find_element(By.XPATH, ".//div[contains(@class,'style-code')]").text except: code = "Code not found" try: size = item.find_element(By.XPATH, ".//div[contains(@class,'option')]").text except: size = "Size not found" try: price = item.find_element(By.XPATH, ".//div[contains(@class,'current-price')]").text except: price = "Price not found" try: change = item.find_element(By.XPATH, ".//div[contains(@class,'change-price')]/span").text except: change = "Price change not found" try: change_pct = item.find_element(By.XPATH, ".//div[contains(@class,'change-percent')]").text.split()[0] except: change_pct = "Change percentage not found" product = { "image": img_url, "name": name, "code": code, "size": size, "price": price, "price_change": change, "price_change_pct": change_pct } products.append(product) print(json.dumps(products, indent=2)) driver.quit()
import json from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By url = "<https://kream.co.kr/trading-chart>" driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install())) driver.get(url)
[ { "image": "<https://kream-phinf.pstatic.net/MjAyMzA0MDNfMTE1/MDAxNjgwNDkxOTQ4NjQ0.W-mLA596MM6US4gSI6jNsJ9NhCbIeUR5mg0qxQ6p_AUg.Ec1REyClrXQ38dSM40zZhVidrYf0gxBsnc7C1SqK71kg.JPEG/a_e78ed04e3a1948a09a7b26bff5b27634.jpg?type=m>", "name": "Nike x Peaceminusone LS T-Shirt Black (DR0098-010)", "code": "DR0098-010", "size": "M", "price": "152,000", "price_change": "\\u25b2", "price_change_pct": "+1.3%" }, { "image": "<https://kream-phinf.pstatic.net/MjAyMTAxMjBfNTAg/MDAxNjExMTIyMzAzMTY2.0QpenidH075iEa1_gVzZTKOxJPiB8W6KyX4YmiELcfIg.ydUN0Aq9T8nWA5frqrsbwnbFfsNMNHDx6ezU5WxGAfQg.PNG/p_28c110281b3f4e109e30a6247d503e2a.png?type=m>", "name": "Nike Dunk Low Pro Premium Medium Curry", "code": "DD1390-100", "size": "255", "price": "107,000", "price_change": "\\u25b2", "price_change_pct": "+0.9%" }, { "image": "<https://kream-phinf.pstatic.net/MjAyMTAzMDVfMjQz/MDAxNjE0OTE0NzIzMTQ4.tsuFUJtHGm4g4KE5EDikVMScORptOQqIB7afi1Nz2Qwg.sftz3YQOuw48xpNSJa1tV4uEsz5iU4mjIvpllgHWEn8g.PNG/p_8f7b72adbc924b5bbf7c670d55865e6b.png?type=m>", "name": "Adidas Samba OG Cloud White", "code": "B75806", "size": "215", "price": "130,000", "price_change": "\\u25b2", "price_change_pct": "+0.8%" } ]
<div data-v-4f90d828="" class="change-price up" style="color: rgb(241, 87, 70);"> <span data-v-4f90d828="" class="arrow">▲</span> <span data-v-4f90d828="">27,000</span> </div>
▲
에 해당하는 \\u25b2
문자만 가져오고 변동액은 가져오지 못한 것으로 보입니다.try: change = item.find_element(By.XPATH, ".//div[contains(@class,'change-price')]").text.replace("\\u25bc", "-").replace("\\u25b2", "+") except: change = "Price change not found"
[ { "image": "<https://kream-phinf.pstatic.net/MjAyMTA3MzBfNTYg/MDAxNjI3NjI3OTg5ODM5.p-9pRcc3cQ_eaTl7UZdCmPJz8Astbjg2N6_HkEhLrHsg.ekjxXxJ-kcnoaZC6gCQH_-KBCUJORPTRC791UZ_C3ukg.PNG/p_e1ef5e002eda49adb7f5d0c8a41f798d.png?type=m>", "name": "Jordan 1 x Travis Scott x Fragment Retro Low OG SP Military Blue", "code": "DM7866-140", "size": "260", "price": "1,875,000", "price_change": "+27,000", "price_change_pct": "+1.5%" }, { "image": "<https://kream-phinf.pstatic.net/MjAyMzA0MDNfMTE1/MDAxNjgwNDkxOTQ4NjQ0.W-mLA596MM6US4gSI6jNsJ9NhCbIeUR5mg0qxQ6p_AUg.Ec1REyClrXQ38dSM40zZhVidrYf0gxBsnc7C1SqK71kg.JPEG/a_e78ed04e3a1948a09a7b26bff5b27634.jpg?type=m>", "name": "Nike x Peaceminusone LS T-Shirt Black (DR0098-010)", "code": "DR0098-010", "size": "M", "price": "152,000", "price_change": "+2,000", "price_change_pct": "+1.3%" }, { "image": "<https://kream-phinf.pstatic.net/MjAyMjEwMTJfMjQ3/MDAxNjY1NTYyODI3ODMw.YeSueVotfq5mgVXlQIVeV-uL_Q2otMk6nkvlbG2rHncg.vMJPWgosd9OjOn-s75jjEnjk44sB1gNqftQSN8CEkTAg.PNG/a_b2325461062d47e2887459a3e6928d88.png?type=m>", "name": "Adidas Puffylette Core Black", "code": "GY4559", "size": "265", "price": "78,000", "price_change": "+1,000", "price_change_pct": "+1.3%" } ]