참고사이트

파이썬 웹 크롤링(Web Crawling) - 2. 웹페이지 긁어오기

예제 1) 웹 문서 전체 가져오기

1
2
$ pip install requests
$ pip install beautifulsoup4

request : Requests를 사용하면 간단한 코드만으로 웹페이지의 html 소스를 가져올 수 있습니다.
beautifulsoup4 : 파이썬 웹 크롤링 라이브러리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.naver.com")
bsObject = BeautifulSoup(html, "html.parser")
print(bsObject) # 웹 문서 전체가 출력

print(bsObject.head.title) # <title>NAVER</title> 출력

for meta in bsObject.head.find_all('meta'):
print(meta.get('content')) # 모든 메타 데이터의 내용 출력

print (bsObject.head.find("meta", {"name":"description"})) # 원하는 태그의 내용 출력

for link in bsObject.find_all('a'):
print(link.text.strip(), link.get('href')) #a 태그로 둘러싸인 텍스트와 a 태그의 href 속성을 출력

urlopen 함수를 사용하여 원하는 주소로부터 웹페이지를 가져온 후, BeautifulSoup 객체로 변환합니다.

BeautifulSoup 객체는 웹문서를 파싱한 상태입니다. 웹 문서가 태그 별로 분해되어 태그로 구성된 트리가 구성됩니다.
포함하는 태그가 부모가 되고 포함된 태그가 자식이 되어 트리를 구성하고 있습니다.

예제 2) 교보문고 베스트셀러 책이름 , 저자 , 가격 출력하기

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
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs

# 교보문고의 베스트셀러 웹페이지를 가져옵니다.

html = urlopen('http://www.kyobobook.co.kr/bestSellerNew/bestseller.laf')
bsObject = bs(html, "html.parser")

# 책의 상세 웹페이지 주소를 추출하여 리스트에 저장합니다.
book_page_urls = []
for cover in bsObject.find_all('div', {'class':'detail'}):
link = cover.select('a')[0].get('href')
book_page_urls.append(link)

# 메타 정보로부터 필요한 정보를 추출합니다.메타 정보에 없는 저자 정보만 따로 가져왔습니다.
for index, book_page_url in enumerate(book_page_urls):
html = urlopen(book_page_url)
bsObject = bs(html, "html.parser")
title = bsObject.find('meta', {'property':'rb:itemName'}).get('content')
author = bsObject.select('span.name a')[0].text
image = bsObject.find('meta', {'property':'rb:itemImage'}).get('content')
url = bsObject.find('meta', {'property':'rb:itemUrl'}).get('content')
originalPrice = bsObject.find('meta', {'property': 'rb:originalPrice'}).get('content')
salePrice = bsObject.find('meta', {'property':'rb:salePrice'}).get('content')

print(index+1, title, author, image, url, originalPrice, salePrice)

2019년 09월 29일 기준

1 흔한남매. 2 흔한남매 (원작), 백난도 http://image.kyobobook.co.kr/images/book/large/454/l9791164132454.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791164132454 11000 9900
2 90년생이 온다 임홍택 http://image.kyobobook.co.kr/images/book/large/674/l9791188248674.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791188248674 14000 12600
3 여행의 이유 김영하 http://image.kyobobook.co.kr/images/book/large/972/l9788954655972.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788954655972 13500 12150
4 당신은 뇌를 고칠 수 있다 톰 오브라이언 http://image.kyobobook.co.kr/images/book/large/414/l9791135442414.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791135442414 19800 17820
5 혼자가 혼자에게 이병률 http://image.kyobobook.co.kr/images/book/large/026/l9791158161026.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791158161026 15500 13950
6 설민석의 삼국지. 1 설민석 http://image.kyobobook.co.kr/images/book/large/792/l9788933870792.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788933870792 22000 19800
7 베스트 셀프 마이크 베이어 http://image.kyobobook.co.kr/images/book/large/968/l9791135444968.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791135444968 18700 16830
8 추리 천재 엉덩이 탐정. 8: 괴도와 납치된 신부 사건 트롤 http://image.kyobobook.co.kr/images/book/large/914/l9791164131914.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791164131914 12000 10800
9 Go Go 카카오프렌즈. 10: 이집트 김미영 http://image.kyobobook.co.kr/images/book/large/369/l9788950983369.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788950983369 12000 10800
10 오늘은 이만 좀 쉴게요(한정판 스페셜 에디션) 손힘찬(오가타 마리토) http://image.kyobobook.co.kr/images/book/large/786/l9791162141786.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162141786 13000 11700
11 지쳤거나 좋아하는 게 없거나 글배우 http://image.kyobobook.co.kr/images/book/large/706/l9791196797706.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791196797706 13500 12150
12 나는 나로 살기로 했다(200쇄 기념 스페셜 에디션) 김수현 http://image.kyobobook.co.kr/images/book/large/845/l9791187119845.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791187119845 13800 12420
13 빨강 머리 앤 루시 모드 몽고메리 http://image.kyobobook.co.kr/images/book/large/084/l9791164450084.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791164450084 16800 15120
14 직지. 1 김진명 http://image.kyobobook.co.kr/images/book/large/322/l9788965708322.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788965708322 14000 12600
15 어떻게 살아야 할지 막막한 너에게 우쥔 http://image.kyobobook.co.kr/images/book/large/901/l9791196756901.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791196756901 15500 13950
16 죽음의 에티켓 롤란트 슐츠 http://image.kyobobook.co.kr/images/book/large/741/l9791188331741.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791188331741 15800 14220
17 룬의 아이들 블러디드. 2 전민희 http://image.kyobobook.co.kr/images/book/large/556/l9788954657556.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788954657556 14500 13050
18 봉제인형 살인사건 다니엘 콜 http://image.kyobobook.co.kr/images/book/large/931/l9788998274931.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788998274931 15000 13500
19 아주 작은 습관의 힘 제임스 클리어 http://image.kyobobook.co.kr/images/book/large/640/l9791162540640.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162540640 16000 14400
20 돈의 감각 이명로(상승미소) http://image.kyobobook.co.kr/images/book/large/985/l9791162540985.jpg http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162540985 16800 15120

예제 3) 네이버 베스트셀러 책이름, 저자, 가격 출력하기

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
31
32
33
34
from urllib.request import urlopen
from bs4 import BeautifulSoup


# 네이버의 베스트셀러 웹페이지를 가져옵니다.
html = urlopen('https://book.naver.com/bestsell/bestseller_list.nhn')
bsObject = BeautifulSoup(html, "html.parser")


# 책의 상세 웹페이지 주소를 추출하여 리스트에 저장합니다.
book_page_urls = []
for index in range(0, 25):
dl_data = bsObject.find('dt', {'id':"book_title_"+str(index)})
link = dl_data.select('a')[0].get('href')
book_page_urls.append(link)



# 메타 정보와 본문에서 필요한 정보를 추출합니다.
for index, book_page_url in enumerate(book_page_urls):
html = urlopen(book_page_url)
bsObject = BeautifulSoup(html, "html.parser")


title = bsObject.find('meta', {'property':'og:title'}).get('content')
author = bsObject.find('dt', text='저자').find_next_siblings('dd')[0].text.strip()
image = bsObject.find('meta', {'property':'og:image'}).get('content')
url = bsObject.find('meta', {'property':'og:url'}).get('content')

dd = bsObject.find('dt', text='가격').find_next_siblings('dd')[0]
salePrice = dd.select('div.lowest strong')[0].text
originalPrice = dd.select('div.lowest span.price')[0].text

print(index+1, title, author, image, url, originalPrice, salePrice)