본문 바로가기

데이터분석/Web Crawler

(Crawler) 다이닝코드 웹 페이지 가져오기

이번 포스트에서는 빅데이터로 맛집 검색을 도와주는 다이닝코드에서
특정 지역의 상위 랭킹 10개의 맛집과 어떤 종류의 음식을 파는지 크롤링해보겠습니다.


환경 : jupyter notebook

다이닝코드 웹 페이지 분석


크롤링을 하기 전에 가져올 웹 페이지의 url과 구조를 알아야합니다.

그래서 다이닝코드 홈페이지에 접속해서 개발자도구로 가져올 페이지 구조를 분석합니다.


 

1. 다이닝코드 홈페이지에 접속해서 원하는 지역을 입력합니다.

2. 좀더 많은 맛집을 위해 우측 하단 더보기를 클릭합니다.



더보기를 눌렀을때 나오는 화면입니다.

여기서 requests를 할 url을 알게 되었고 'query=' 가 제가 검색한 '강남'이란 것을 알게 되었습니다.

하지만 여기서 저는 맛집 이름과 음식 종류를 얻어 올것이기 때문에 개발자 도구(F12)를 통해 html 태그와 class명을 찾을 겁니다.

1. 1번을 클릭합니다.

2. 음식점 이름의 태그를 알기 위해 2번을 클릭합니다.

3. 클릭 결과 3번과 같이 html 태그와 class를 구할 수 있습니다. 

requests, BeautifulSoup 설치


크롤링을 하기 위해서 Python에서 HTTP 요청을 보내는 모듈인 requests와

HTML과 XML 데이터를 파싱할때 사용하는 Python 라이브러리인 BeautifulSoup 모듈을 설치하겠습니다.


1
!pip install requests bs4
cs

다이닝코드 웹페이지 가져오기


다이닝코드 웹페이지 분석에서 얻은 URL, HTML 태그, Class 명을 활용하여 다이닝코드 웹페이지 정보를 가져올 것입니다.


1
2
3
4
5
6
7
8
9
import requests
from bs4 import BeautifulSoup
 
param = '강남'
 
url = 'https://www.diningcode.com/list.php?query='+param
 
html = requests.get(url)  ##requests를 이용해서 url의 html 파일을 가져옴
soup = BeautifulSoup(html.text, "html.parser"## 가져온 html 파일을 html parser를 통해서 정리
cs
▲ 제가 검색할 지역은 강남이기 때문에 param을 '강남'으로 줬습니다.

  requests.get(url)을 통해 url의 html을 가져오고 BeautifulSoup를 사용하여 html parser로 정리해줍니다.


1
2
3
4
5
6
restaurants = soup.findAll("span",attrs={"class":"btxt"})
food_kinds = soup.findAll("span", attrs={"class":"stxt"})
 
for line1, line2, line3 in zip(restaurants[1:], food_kinds[1:], score):
    print(line1.get_text(), end= ': ')
    print(line2.get_text())
cs

▲ 제가 얻고자 하는 정보는 맛집명, 음식 종류이기 때문에 다이닝코드 웹페이지 분석하기에서 얻은 HTML 태그와, class명을 findAll()을 통해 가져옵니다.

그리고 불러온 첫번째 정보는 필요없는 정보이기 때문에 두번째 요소부터 출력을 위해 [1:]을 사용했습니다.

결과는 아래와 같습니다.



'데이터분석 > Web Crawler' 카테고리의 다른 글

(Crawler) selenium으로 이미지 크롤링  (4) 2019.01.25