오늘 할 일 (계획)
1. 추가 데이터 베이스 확충 하기
2. 포켓몬 얼굴상 프로젝트 자동 업데이트 설정 완료하기
3. AI 분석 준비하기 - 두 번째 사이트 크롤링되면 실행할 수 있게 준비
4. 프로젝트 완성
오늘 한 일 (회고)
1. 추가 데이터 베이스 확충 하기
- 작업 완료
- 음식 관련 사이트 스크래핑을 위하여 해당 내용 배포 완료
2. 기존 크롤링한 사이트 말고. aspx로 작성된 사이트 크롤링 완료
3. Drink_plus 프로젝트 디테일 정리
- 프론트 관련 및 세부 기능 구현 마무리
4. AI 기능 구현 시작
* 코드
soup을 이용해서 태그를 탐색할때 개발자 도구를 기준으로 하지않고 터미널에 print로 출력했을때의 값을 기준으로 하면서 원하는 값을 찾았습니다
def scraping(payload_data, id_num, page):
response = requests.post('https://www.tastings.com/WebServices/ProcessRequest.asmx/SearchBeer', headers=headers,
data=payload_data)
json_res = json.loads(response.text)
json_res = json.loads(json_res['d'])
soup = BeautifulSoup(json_res['HtmlGrid'], 'html.parser')
category_tr = soup.select('div> div.item ')
i = 0
url_base = "https://tastings.com"
for tr in category_tr:
i += 1
try :
url_detail = str(tr.select_one('div.item > div.img > a ')['href'])
print("=================================시작=================================")
# img = url_base + str(tr.select_one('div.item > div.img > a > img')['src'])
url = url_base + url_detail
print("url : " + url)
print("=================================" + str(id_num) + "=================================")
# ctl00_ContentMain_pnlTastingProducerRow
driver.get(url)
print('페이지 전환')
time.sleep(3)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')
print("=================================구조확인=================================")
# print(soup)
print("=================================사이트 내용=================================")
main = soup.select_one('#ctl00_ContentMain_pnlCurrentTopRow')
# img 값 가져오기
img = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-left-container > '
'div.m-review-left-image-container > img')['src']
# title 값 가져오기
brand_name = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-middle-container > div.m-review-middle-text-container >'
'h1.m-review-middle-brand-q > #spaSetBrandName ').text.strip().replace("'", "")
item_name = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-middle-container > div.m-review-middle-text-container >'
'h1.m-review-middle-brand-q > #spaBevNameCert ').text.strip().replace("'", "")
title = brand_name + " [ " + item_name + " ]"
# category_name 값 가져오기
category_name = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-middle-container > div.m-review-middle-text-container >'
'div.m-review-center-info-text > h3 ').text.lstrip('Category:').strip().replace("'", "")
# price 값 가져오기
price = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-right-container > div.m-review-medal-container-q >'
'#ctl00_ContentMain_divPrice').text.strip().replace("'", "")
# description 값 가져오기
description = main.select_one(
'div.m-row > div.m-review-testimonials-container> div.m-review-testimonials-text > '
'span').text.strip().replace("'", "")
# score 값 가져오기
score = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-right-container > div.m-review-medal-container-q >'
'div.m-review-medal-points-q >span').text.strip().replace("'", "")
# alcohol 값 가져오기
alcohol_list = main.select_one('div.m-row > div.m-review-container-q > div.m-container-table > '
'div.m-review-middle-container > div.m-review-middle-text-container >'
'div.m-review-center-info-text')
ali = 0
for al in alcohol_list:
ali += 1
# print('=======================' + str(ali) + '=================================')
if ali == 8:
alcohol = str(al)
if alcohol != None:
alcohol = alcohol.lstrip('<div>').lstrip().lstrip('Alcohol:').rstrip('>vid/<').strip().replace("'", "")
else:
alcohol
# print(alcohol)
print("category_name : " + category_name)
print("img : " + img)
print("title : " + title)
print("price : " + price)
print("description : " + description)
print("score : " + score)
print("alcohol : " + alcohol)
print("=================================정보 섹터 준비 =================================")
info = soup.select_one('#ctl00_ContentMain_pnlTastingProducerRow > div.m-row > div.m-container-50-pct > '
'div.m-review-box-left-q > #ctl00_ContentMain_divTastingInfo')
# info 값 가져오기
style_info = exception((
'table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowStyle > '
'td.m-review-tastings-notes-cell-value'), info)
aroma_info = exception((
'table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowAroma > '
'td.m-review-tastings-notes-cell-value'), info)
flavor_info = exception((
'table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowFlavor > '
'td.m-review-tastings-notes-cell-value'), info)
smoothness_info = exception(
('table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowSmoothness > '
'td.m-review-tastings-notes-cell-value'), info)
finish_info = exception(('table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowFinish > '
'td.m-review-tastings-notes-cell-value'), info)
enjoy_info = exception((
'table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowEnjoy > '
'td.m-review-tastings-notes-cell-value'), info)
pairing_info = exception((
'table.m-review-tastings-notes-table-q > tbody > #ctl00_ContentMain_rowPairing > '
'td.m-review-tastings-notes-cell-value'), info)
# print(info)
print("style_info : " + style_info)
print("aroma_info : " + aroma_info)
print("flavor_info : " + flavor_info)
print("finish_info : " + finish_info)
print("smoothness_info : " + smoothness_info)
print("enjoy_info : " + enjoy_info)
print("pairing_info : " + pairing_info)
except:
continue
else:
# id_num += 1
# cursor.execute(
# f"INSERT INTO drink_db VALUES('{id_num}','{category_name}','{img}','{title}','{price.strip()}','{description}','{score}','{alcohol}','{style_info}','{aroma_info}','{flavor_info}','{finish_info}','{smoothness_info}','{enjoy_info}','{pairing_info}','{page}')");
#
# db.commit()
print("================================= 완료 =================================")
return id_num
내일 할 일
1. AI 기능 구현
2. 포켓몬 얼굴상 프로젝트 자동 업데이트 설정 완료하기
3. AI 분석 준비하기 - 두 번째 사이트 크롤링되면 실행할 수 있게 준비
4. 프로젝트 완성
'TIL' 카테고리의 다른 글
2-10[Django, 환경변수, 가상환경] python Django 실무 정리 #1 (0) | 2022.02.10 |
---|---|
2-9[Project] 술 추천 시스템 구현 - 유저기반 추천 시스템 (0) | 2022.02.09 |
2-7[Project] aspx 사이트 분석 크롤링 준비 (0) | 2022.02.07 |
2-6[Project] Django를 이용한 검색기능 (0) | 2022.02.06 |
2-5[Project] Django view와 Django 템플릿 문법 (0) | 2022.02.06 |