Skip to content

Commit d473548

Browse files
committed
fix: PriceParser 오류 수정
1 parent 7782834 commit d473548

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

src/main/kotlin/backend/itracker/crawl/service/util/Crawler.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import backend.itracker.crawl.exception.CrawlException
44
import backend.itracker.crawl.service.util.helper.DriverConnector
55
import backend.itracker.crawl.service.util.helper.PriceParser
66
import backend.itracker.crawl.service.util.helper.WebElementHelper
7+
import backend.itracker.crawl.service.vo.DefaultPrice
78
import backend.itracker.crawl.service.vo.DefaultProduct
89
import io.github.oshai.kotlinlogging.KotlinLogging
910
import org.openqa.selenium.By
@@ -55,14 +56,18 @@ class Crawler(
5556
}
5657

5758

59+
val price = priceParser.getDefaultPrice(element)
60+
if (DefaultPrice.none() == price) {
61+
continue
62+
}
5863
products[productId] = DefaultProduct(
5964
productId = productId.toLong(),
6065
subCategory = helper.findClassName(
6166
helper.findGrandParentElement(element),
6267
"product-list-header__title"
6368
),
6469
name = element.text.split(System.lineSeparator())[0],
65-
price = priceParser.getDefaultPrice(element),
70+
price = price,
6671
productLink = helper.findByTagAndAttribute(element, "a", "href"),
6772
thumbnailLink = helper.findByTagAndAttribute(element, "img", "src")
6873
)

src/main/kotlin/backend/itracker/crawl/service/util/helper/PriceParser.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package backend.itracker.crawl.service.util.helper
22

33
import backend.itracker.crawl.service.vo.DefaultPrice
4+
import backend.itracker.schedule.infra.notification.solapi.logger
45
import org.openqa.selenium.By
56
import org.openqa.selenium.WebElement
67
import org.springframework.stereotype.Component
@@ -21,15 +22,24 @@ class PriceParser(
2122
var discountPercentage = 0
2223
var basePrice = BigDecimal.ZERO
2324
if (helper.hasClass(element, DISCOUNT_PERCENTAGE)) {
25+
val discountPercentageElement = element.findElement(By.className(DISCOUNT_PERCENTAGE)).text
26+
val basePriceElement = element.findElement(By.className(BASE_PRICE)).text
27+
if (discountPercentageElement.isBlank() || basePriceElement.isBlank()) {
28+
return DefaultPrice.none()
29+
}
2430
discountPercentage =
25-
element.findElement(By.className(DISCOUNT_PERCENTAGE)).text.split(System.lineSeparator())[0]
26-
.replace("%", "").toInt()
27-
basePrice = element.findElement(By.className(BASE_PRICE)).text
31+
discountPercentageElement.split(System.lineSeparator())[0]
32+
.replace("%", "").toIntOrNull() ?: loggingElement("discountPercent", discountPercentageElement)
33+
basePrice = basePriceElement
2834
.replace(",", "")
2935
.removeSuffix("").toBigDecimal()
3036
}
3137

32-
val currentPrice = element.findElement(By.className(CURRENT_PRICE)).text
38+
val currentPriceElement = element.findElement(By.className(CURRENT_PRICE)).text
39+
if (currentPriceElement.isBlank()) {
40+
return DefaultPrice.none()
41+
}
42+
val currentPrice = currentPriceElement
3343
.replace(",", "")
3444
.removeSuffix("").toBigDecimal()
3545

@@ -45,4 +55,9 @@ class PriceParser(
4555
isOutOfStock = isOutOfStock
4656
)
4757
}
58+
59+
private fun loggingElement(name: String, element: String?): Int {
60+
logger.error { "할인율 파싱 중 오류가 발생했습니다. $name: $element" }
61+
return 0
62+
}
4863
}

src/main/kotlin/backend/itracker/crawl/service/vo/DefaultPrice.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,23 @@ package backend.itracker.crawl.service.vo
22

33
import java.math.BigDecimal
44

5+
private val none = DefaultPrice(
6+
discountPercentage = 0,
7+
basePrice = BigDecimal.ZERO,
8+
discountPrice = BigDecimal.ZERO,
9+
isOutOfStock = "품절"
10+
)
11+
512
data class DefaultPrice(
613
val discountPercentage: Int,
714
val basePrice: BigDecimal,
815
val discountPrice: BigDecimal,
916
val isOutOfStock: Boolean
1017
) {
18+
companion object {
19+
fun none() = none
20+
}
21+
1122
constructor(
1223
discountPercentage: Int,
1324
basePrice: BigDecimal,

0 commit comments

Comments
 (0)