🤔

활용편 - 이슈

집필 중에 생긴 이슈들을 관리하는 페이지입니다.
 
이슈에 대한 부분은 댓글 기능을 이용해서 쭉 달아주세요~ - 노란색으로 된 부분 클릭하면 해당 댓글 선택됩니다. - 노란색 표시가 없는 부분에도 다른 의견 있으시면 댓글 달아주시면 됩니다! * 작성하실 때, 이 부분이 왜 이야기해봐야할지 이해가 갈 수 있도록 이유도 간단하게 작성 부탁드립니다.
 
 
1️⃣
코드 컨벤션

웹드라이버 실행

url = 'https://m.bunjang.co.kr/' # webdriver 실행 driver = webdriver.Chrome() driver.get(url) print(driver.current_url) print(driver.title)
# webdriver 종료 driver.close()
  • 웹드라이버 실행하고 크롤링 한 후에 꼭 driver 종료 부탁드려요~!
 

DB 적재 코드

  1. 라이브러리 임포트
import pymysql # password 입력 password = '0000'
  1. MySQL 연결 및 DB 생성
# MySQL Connection conn = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'root', password = password, charset='utf8') # DB 생성 with conn: with conn.cursor() as cur: cur.execute('CREATE DATABASE test_db') conn.commit()
  1. DB에 연결
# DB Connection conn = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'root', password = password, charset='utf8', database='test_db')
  1. 테이블 생성 및 데이터 저장
# 테이블 생성 sql = '''create table market_product ( pid varchar(10) primary key, title varchar(50), price int, upload_time varchar(10), place varchar(30), inspection int, delivery_fee int, pay int, href varchar(150), volume varchar(10), type varchar(10), version varchar(10));''' with conn.cursor() as cur: cur.execute(sql) conn.commit()
# Table 확인 <- 안하셔도 되요~ sql = 'SHOW TABLES' with conn.cursor() as cur: cur.execute(sql) for t in cur: print(t)
# 데이터 저장 (데이터프레임에 저장된 데이터) with conn.cursor() as cursor: for _, row in df.iterrows(): sql = ''' INSERT INTO market_product (pid, title, price, upload_time, place, Inspection, delivery_fee, pay, href, volume, type, version) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ''' values = ( row['pid'], row['title'], row['price'], row['upload_time'], row['place'], row['Inspection'], row['delivery_fee'], row['pay'], row['href'], row['volume'], row['type'], row['version'] ) cursor.execute(sql, values) # 커밋 conn.commit()
# DB Connection 종료 conn.close()
  1. 조회, 필터링
# DB Connection conn = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'root', password = password, charset='utf8', database='lightining_Market')
# 필터링1 - : 기종, 용량, 가격, 업로드 날짜 query = '''SELECT * FROM market_product WHERE type = 'S6 Lite' AND volume = '128GB' AND price < 350000 AND upload_time > '2023-06-01' ORDER BY upload_time DESC;''' # 쿼리 실행 with conn.cursor() as cursor: cursor.execute(query) result = cursor.fetchall() # 결과 출력 print(f'조건에 일치하는 상품: 총 {len(result)}개') result_df = pd.DataFrame(result, columns=['pid', 'title', 'price', 'upload_time', 'place', 'Inspection', 'delivery_fee', 'pay', 'href', 'volume', 'type', 'version']) result_df
# 연결 종료 conn.close()
  • 조회, 필터링에 #결과 출력 부분은 아직 확정 부분은 아닙니다!
    • 좀 더 깔끔하게 보여줄 수 있는 방법이 있으면 말씀해주세요~!
       
 
2️⃣
활용편 공통 부분 문체 통일 및 목차 워딩 다듬기
  • 링크 or 사이트(링크)
  • 크롤링 가능 여부 체크 or 확인
  • 사이트 or 페이지 → 혼용(홈페이지는 사이트, 크롤링시에는 페이지)
  • 살펴보기 or 탐색
 
 
3️⃣
기타 통일이 필요해보이는 사항들
  • 제목 사용: 제목1 다음에 제목2 or 제목3 ⇒ kotra 확인 필요
  • 각 문단 내 들여쓰기 사용 여(space 2번) or 부
  • robots.txt => Plain Text로 코드 블럭 변경
  • 이미지 사용 시 이미지 설명글(캡션)을 이미지 전 or
  • 결과값은 코드블럭이 아닌 이미지로 사용 찬성/반대 찬성: MySQL은 캡쳐, Python은 코드블럭 투트랙보다 통일이 좋다. 또한 결과값이 코드블럭이라면 독자가 보는 화면과 구성이 달라 혼란을 야기할 수 있다. 반대: 코드블럭으로 사용하자는 의견이 있다면 적어주세요.
  • 테두리 : 예시 만들어서 디스코드 라운지에서 투표
  • Github에 업로드 할 코드와 == Notion에 업로드 한 코드 해야함. (주석 포함) 위 부분 고려해서 Notion에 설명 작성 요망
  • 컬럼: Column, 커서: Cursor, Conn: Connection, 데이터프레임: DataFrame 등 용어를 한글로 사용할지 영어 사용할지 통일 필요해보임(그리고 sql 연결 종료 시에 종료: close. close메서드가 있기 때문에 close로 사용하는 것에 한표)
  • MySQL에서 확인하면 대문자로 DB를 생성해도 소문자로 입력됨! 그래서 그냥 전부 소문자로 하면 어떨까? (DB, 테이블, 컬럼)
  • WITH문을 사용할 때 자동으로 close가 진행된다는 점과 commit하는 부분을 설명에 반복해서 넣어주어도 괜찮을지?
  • 코드 설명을 위에서 해줄지, 밑에서 해줄지 (번개장터는 현재 위에서 설명해줌)
 
  • time.sleep 시간 설정
📢
NoSuchElementError 웹 페이지가 모두 로딩이 되기 전에 크롤링이 시작되어서 나는 오류입니다. 해당 오류가 발생할 경우에 time.sleep() 의 시간을 늘려줌으로 해결할 수 있습니다.
time.sleep() # 시간조절
  • DB 필터링 예시 개수
  • 따옴표 - XPATH → 큰 따옴표 3개 (”””) - 일반 → 작은 따옴표 1개 (’)
# XPATH → 큰 따옴표 3개 (”””) driver.find_element(By.XPATH, f"""//*[@id="tbody"]/tr[{title_num}]/td[2]/a""").click() # 일반 → 작은 따옴표 1개 (’) keyword = row['title'].replace('Keyword', '').replace('#', '').strip()
 
4️⃣
반드시 확인이 필요한 사항
  • 직접 제작하지 않은 이미지의 경우 캡션에 출처 명시.
 
 
5️⃣