# 1. Language/🌊 Python

셀레니움(Selenium) # 크롤링/스크래핑한 데이터 DB에 넣기

둥굴둥굴둥굴레차 2021. 8. 15. 22:51

 

우리는 광주 지역의 카페에 대한 정보를 스크래핑하고 싶었다.

 

그래서 카카오맵'전라도 광주 광산구 송정1동 카페' 라고 검색한 화면에서 볼 수 있는

카페의 이름, 주소, 영업시간, 전화번호를 스크래핑하려 하고있다.

 

카카오맵에 ' 전라도 광주 광산구 송정1동 카페' 라고 검색한 화면

 

 

스크래핑을 위해 VScode에서 로직을 짰고, 그 결과는 아래 영상과 같다.

VScode에서 실행하면

 

 

다음과 같이 창이 자동으로 뜨고 자동으로 페이지 변환까지 하며 스크래핑 한다.

 

 

그리하여 얻은 결과값은 아래와 같다.

 

[{'address': '광주 광산구 송도로304번길 15-14',
  'cafe_name': '비행기카페',
  'opening_hours': '영업시간 매일 09:30 ~ 22:00',
  'telephone': '062-941-0003'},
 {'address': '광주 광산구 상무대로 298 1,2층',
  'cafe_name': '카페굴리엘모커피 송정공원역점',
  'opening_hours': '',
  'telephone': '062-943-1943'},

...

(생략)

...

 {'address': '광주 광산구 상무대로 263',
  'cafe_name': '몬코드',
  'opening_hours': '',
  'telephone': ''},
 {'address': '광주 광산구 어등대로 713-1 1층',
  'cafe_name': '커피더솔',
  'opening_hours': '영업시간 일 09:00 ~ 21:00',
  'telephone': ''}]

 

 

리스트 안에 여러개의 딕셔너리로 들어간 데이터들!

 

DB에 넣어주려면 다음과 같은 형태의 데이터로 바꿔줘야한다.

 

[[카페1 이름, 카페1 전화번호, 카페1 주소], 
 [카페2 이름, 카페2 전화번호, 카페2 주소], 
 [카페3 이름, 카페3 전화번호, 카페3 주소]]

 

 

따라서 다음의 로직을 짜서 DB에 들어가기 알맞은 형태로 바꾸어주었다.

 

tmp = []
res = []
for i in range(len(store_list)):
    tmp = []
    for j in store_list[i].values():
        tmp.append(j)
    res.append(tmp)
pprint.pprint(res)

 

 

위 로직을 사용하여 다시 실행시킨 후에 얻을 수 있는 결과값.

 

[['비행기카페', '광주 광산구 송도로304번길 15-14', '영업시간 매일 09:30 ~ 22:00', '062-941-0003'],
 ['카페굴리엘모커피 송정공원역점', '광주 광산구 상무대로 298 1,2층', '', '062-943-1943'],
 
 ...

(생략)

...

 ['몬코드', '광주 광산구 상무대로 263', '', ''],
 ['커피더솔', '광주 광산구 어등대로 713-1 1층', '영업시간 일 09:00 ~ 21:00', '']]

 

 

이제 DB에 넣어보자!

DB에 넣기 위해선 아래의 코드를 추가해줘야 했다.

 

# 전화번호 사이의 하이푼('-') 때문에 telephone을 String 형태로 받아왔다.

connect = pymysql.connect(host='localhost', user='유저명', password='비밀번호', db='디비이름', charset='utf8mb4')
cursor = connect.cursor()

for r in res:
    cafe_name = str(r[0])
    address = str(r[1])
    opening_hours = str(r[2])
    telephone  = str(r[3])

    sql = """insert into crawling
    (cafe_name, address, opening_hours, telephone )
    values ('%s', '%s', '%s', '%s')
    """ % (cafe_name, address, opening_hours, telephone )

    cursor.execute(sql)
    connect.commit()
connect.close()

 

 

그리고 DB에 다음의 테이블을 추가해주었다.

 

CREATE TABLE crawling (
  `cafe_name` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL PRIMARY KEY,
  `address` varchar(100) COLLATE utf8mb3_unicode_ci NOT NULL,
  `opening_hours` varchar(100) COLLATE utf8mb3_unicode_ci,
  `telephone` varchar(100) COLLATE utf8mb3_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

 

 

그리고 코드를 실행해주면 다음과 같이 DB에 잘 들어온 데이터들을 볼 수 있다!

 

 


 

🔽 REFERENCE

 

[Python] Selenium으로 중고나라 크롤링 후 MySQL에 저장

안녕하세요! 이번엔 중고나라를 크롤링했습니다. 예전에 과제로 했던거라 기억은 잘 안나지만 최대한 써볼게요! 제가 크롤링한 부분은 중고나라의 미개봉 새상품 목록입니다. 크롤링할 데이터

jh-0323.tistory.com