일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- SQLD 이론
- sqld요약
- 클린 코드
- N-Queen
- DP
- 파이썬
- sqld
- MFC
- git
- 역행자
- 서버최적화
- clean code
- 오픽 초보
- 서버아키텍처
- beautifulsoup
- Backtracking
- SW개발자를 위한 성능좋은 SQL
- 주석
- 알고리즘
- 자청
- c++
- 백준
- 클린코드
- Python
- Javascript
- 폴링vs이벤트
- BFS
- SQLD이론
- 오픽
- 게임서버개발
- Today
- Total
가취공부하자
BeautifulSoup, 웹 스크래핑 본문
식신 : 대한민국 No.1 맛집검색,맛집추천
전국부터 해외까지 없는 맛집이 없는 No.1 맛집 정보 & 추천 서비스 국민맛집 식신!
www.siksinhot.com
오늘 실습의 목표는 '식신'사이트에서 강남을 검색해 상위 10개 맛집에 대한 정보를 추출하는 것이다.
실습 순서는
1. 식신 페이지의 HTML 요소를 읽어온다.
2. 강남 상위 10개 맛집 url 링크를 추출한다.
3. 해당 링크에서 맛집 이름, 주소, 전화번호 정보를 추출한다.
첫 번째, 식신 페이지의 Html요소를 읽어오기
from bs4 import BeautifulSoup
from threading import Thread
import urllib.request
from urllib.parse import quote
#해당 페이지의 html 요소 읽어온다.
home_url = 'https://www.siksinhot.com/'
keywords = quote('강남')
search_url = 'https://www.siksinhot.com/search?keywords='+ keywords
s_html = urllib.request.urlopen(search_url).read()
s_soup = BeautifulSoup(s_html,'lxml')
코드 작성하면서 마주한 에러.. 'ascii' codec can't encode characters in position 21-22: ordinal not in range(128)
keywords= '강남'
해결 : keywords = quote('강남')
두 번째, 강남 상위 10개 맛집 url 추출.
식신에서 '강남'을 검색했을 때 나오는 페이지의 HTML이다.
우리가 얻어야 하는 정보는
<div class='listTy1' ~>
<ul>
<a href='/p/12213'>
으로 타고 들어가 href에 있는 정보를 얻어야 한다. ul까지가 공통 태그이고 a에 원하는 정보가 들어있다.
from bs4 import BeautifulSoup
from threading import Thread
import urllib.request
from urllib.parse import quote
#해당 페이지의 html 요소 읽어온다.
home_url = 'https://www.siksinhot.com/'
keywords = #quote('강남')
search_url = 'https://www.siksinhot.com/search?keywords='+ keywords
s_html = urllib.request.urlopen(search_url).read()
s_soup = BeautifulSoup(s_html,'lxml')
#강남 상위 10개 맛집 url 추출
s_urls = s_soup.select('div.listTy1 ul div.cont a')[:10]
urls =[]
for u in range(len(s_urls)):
urls.append(home_url + s_urls[u]['href'])
print(urls[u])
세 번째, 추출한 링크로 들어가 맛집의 이름, 주소, 전화번호를 추출.
주황색 - 주소, 초록색 -전화번호 정보를 추출하기 위해 봐야 하는 태그
from bs4 import BeautifulSoup
from threading import Thread
import urllib.request
from urllib.parse import quote
#해당 페이지의 html 요소 읽어온다.
home_url = 'https://www.siksinhot.com/'
keywords = #quote('강남')
search_url = 'https://www.siksinhot.com/search?keywords='+ keywords
s_html = urllib.request.urlopen(search_url).read()
s_soup = BeautifulSoup(s_html,'lxml')
#강남 상위 10개 맛집 url 추출
s_urls = s_soup.select('div.listTy1 ul div.cont a')[:10]
urls =[]
for u in range(len(s_urls)):
urls.append(home_url + s_urls[u]['href'])
print(urls[u])
#스크래핑 작업
def scrape(url:str):
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, 'lxml')
#얻을 정보 : 식당이름, 주소, 전화번호
title = soup.select('div.store_name_score h3')
print('Title : ', title[0].getText())
address = soup.select('div.store_info span')
print('Address : ', address[0].getText())
phone = soup.select('div.p_tel p')
print('Phone :', phone[0].getText())
print('----------------')
thread_list = []
for url in urls:
t =Thread(target=scrape, args=(url,))
t.start()
thread_list.append(t)
for t in thread_list:
t.join()
+ 속도를 더 빠르게 하기 위해서 Thread를 사용하였다.
<참조>
http://www.acornpub.co.kr/book/automate-it (파이썬 비즈니스 자동화, 에이콘출판사, 2018)
파이썬과 비즈니스 자동화
파이썬 2.7로 비즈니스 자동화를 위한 필요한 기술을 다루고, 실제로 활용할 수 있도록 도와준다
www.acornpub.co.kr
'Python > (책)파이썬과 비지니스 자동화' 카테고리의 다른 글
데이터 분석의 다양한 측면과 접근방식 (0) | 2022.08.04 |
---|---|
[Python] RESTful API 구현 (0) | 2022.07.31 |
REST(Representational State Transfer)란? (0) | 2022.07.31 |
Tornado를 사용해 비동기 http 서버 실행 (0) | 2022.07.12 |
BeautifulSoup로 웹 콘텐츠 이미지 추출 및 다운로드 (0) | 2022.07.11 |