Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 웹 스크랩핑
- 파이썬 철저 입문
- 파이썬 철저입문
- 어쩌다 마케팅
- TiL
- 내일배움카드
- 스파르타 코딩
- wil
- 프로젝트
- 스파르타
- 회귀분석
- 중회귀모형
- Cluster
- 실전 데이터 분석 프로젝트
- 파이썬 머신러닝 완벽 가이드
- hackerrank
- SQL
- 파이썬 머신러닝 완벽가이드
- MySQL
- 내일배움캠프
- 티스토리챌린지
- harkerrank
- 스파르타코딩
- 내일배움
- 텍스트 분석
- 미세먼지
- 파이썬
- 프로그래머스
- R
- 오블완
Archives
- Today
- Total
OkBublewrap
@코스메 한국 브랜드 화장품 데이터베이스 구축(5) 본문
1. review_text TABLE
2025-02-28 12:55:28,417 - ERROR - Error fetching 510549066: HTTPSConnectionPool(host='www.cosme.net', port=443): Read timed out. (read timeout=5)
이전에 진행했던 코드로 에러가 발생했다. 연결하는 시간이 적었던 모양이다.
추후에 리뷰가 있는 review_id를 가져와 없는 review_id를 추출해서 리뷰 텍스트를 크롤링 진행
def get_review_id_in():
"""기존 적재된 review_id 리스트 가져오기"""
conn = sqlite3.connect(DB_NAME)
cursor = conn.cursor()
cursor.execute("SELECT review_text FROM review_text")
review_ids_in = [row[0] for row in cursor.fetchall()]
conn.close()
logging.info(f"Successfully fetched {len(review_ids_in)} review IDs in")
return review_ids_in
main()
review_ids_list = set(get_review_id()) # 전체 리뷰 ID
review_ids_list_in = set(get_review_id_in()) # 이미 저장된 리뷰 ID # 수정 부분
new_review_ids = list(review_ids_list - review_ids_list_in) # 수정 부분
@retry(
wait=wait_exponential(multiplier=1, min=2, max=10),
stop=stop_after_attempt(3),
retry=retry_if_exception_type((RequestException, Timeout)) # 특정 네트워크 오류만 재시도
)
def fetch(review_id):
"""웹페이지 요청 후 리뷰 텍스트 크롤링 (재시도 추가)"""
try:
url = cosme_url['review_text'] + f"{review_id}/"
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # HTTP 에러 발생 시 예외 발생
soup = BeautifulSoup(response.text, "html.parser")
time.sleep(random.uniform(2, 4))
review_text_element = soup.find("p", class_="read")
if review_text_element:
return (review_id, review_text_element.get_text(" ", strip=True))
else:
logging.warning(f"[{review_id}] No review text found.")
return None
except HTTPError as e:
if response.status_code == 404:
logging.warning(f"[{review_id}] Page not found (404), skipping.")
return None # 404면 재시도 안 함
raise # 다른 HTTP 에러는 재시도
except RequestException as e:
logging.error(f"[{review_id}] Network error: {e}")
raise # 네트워크 오류는 재시도
except Exception as e:
logging.error(f"[{review_id}] Unexpected error: {e}")
return None # 기타 오류는 재시도 없이 바로 종료
@retry 데코레이터
재시도 간격 최소 2초 ~ 최대 10초
최대 3번까지만 재시도
timeout 10초까지 늘림
🚨 2025-03-01 13:42:14,992 - ERROR - [513718461] Network error: HTTPSConnectionPool(host='www.cosme.net', port=443): Read timed out. (read timeout=60)
아무리 기다리는 시간을 늘어도 내 컴퓨터의 한계인것 같다.
쓰레드 숫자도 줄었으나 실패, 더이상은 데이터 수집을 못할 것 같다.
product_detail만 새로 수집하고 scrapy 프레임워크로 코드를 다시 작성을 해야겠다.
가장 중요한 것은 이것을 가지고 무엇을 할까인데.
시계열 랭킹 변환하는 것, 각 제품의 리뷰 분석 정도 되지 않을까.
ERD
'Python > 프로젝트' 카테고리의 다른 글
@코스메 한국 브랜드 화장품 데이터베이스 구축(4) (0) | 2025.02.27 |
---|---|
@코스메 한국 브랜드 화장품 데이터베이스 구축(3) (0) | 2025.02.25 |
@코스메 한국 브랜드 화장품 데이터베이스 구축(2) (0) | 2025.02.24 |
@코스메 한국 브랜드 화장품 데이터베이스 구축(1) (3) | 2025.02.23 |
Discord 미세먼지 Msg (0) | 2023.04.21 |