우리는 광주 지역의 카페에 대한 정보를 스크래핑하고 싶었다.
그래서 카카오맵에 '전라도 광주 광산구 송정1동 카페' 라고 검색한 화면에서 볼 수 있는
카페의 이름, 주소, 영업시간, 전화번호를 스크래핑하려 하고있다.
스크래핑을 위해 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
'# 1. Language > 🌊 Python' 카테고리의 다른 글
셀레니움(Selenium) # ElementNotInteractableException Message: element not interactable에러 (0) | 2021.08.18 |
---|---|
셀레니움(Selenium) # chrome not reachable 에러 (0) | 2021.08.17 |
TIL # Python 예제 (0) | 2021.02.16 |
TIL # Python 이론정리 (0) | 2021.02.16 |
텔레그램 챗봇 & 공공데이터 API (0) | 2021.02.11 |