[TIL-5] 교보문고 웹 스크래핑

우소라·2023년 3월 17일
0

1. 어떤 문제가 있었나?

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
from urllib.request import urlopen


driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 교보문고의 베스트셀러 웹페이지를 가져옵니다.
driver.get("https://product.kyobobook.co.kr/bestseller/online?period=001")
bsObject = BeautifulSoup(driver.page_source, 'html.parser')

-> 구글링해서 교보문고 웹크롤링 하는거 발견했는데, 필요한 패키지가 내 파이썬 버전에선 설치가 안됨

2. 내가 시도한 것

웹개발 종합반 스파르타피디아 강의 참고해서

import requests
from bs4 import BeautifulSoup

url = 'https://contents.kyobobook.co.kr/sih/fit-in/'

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(url,headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

앞에 이렇게써주고..

og_image = soup.select_one('meta[property="og:image"]')
og_title = soup.select_one('meta[property="og:title"]')
og_description = soup.select_one('meta[property="og:description"]')

print(og_image)
print(og_title)
print(og_description)

시도 했으나, 교보문고 홈페이지 이미지, 책 이름, 작가 이름 지칭하는 클래스를 찾기 어려웠음

3. 해결
결국 팀원분이 하나하나 다 찾아내셨고

앞에 썼던 og_image, og 어쩌구 하는 클래스들 이름을
교보문고 홈페이지가 지정하는 홈페이지로 만듦

data = requests.get(url_receive)
    soup = BeautifulSoup(data.text, "html.parser")

    img_tag = soup.select_one("img[src^='https://contents.kyobobook.co.kr/sih/fit-in/']")
    img_url = img_tag.get("src")

    title_tag = soup.select_one(
        "#contents > div.prod_detail_header > div > div.prod_detail_title_wrap > div > div.prod_title_box.auto_overflow_wrap > div.auto_overflow_contents > div > h1 > span")
    title_name = title_tag.text

    author_tag = soup.select_one(
        "#contents > div.prod_detail_header > div > div.prod_detail_view_wrap > div.prod_detail_view_area > div:nth-child(1) > div > div.prod_author_box.auto_overflow_wrap > div.auto_overflow_contents > div > div > a:nth-child(1)")
    author_name = author_tag.text

4.알게된 점

div로 감싸진 클래쓰들이 많을땐, 하나하나 경로 써서 지칭해줘야 한다.

ex)

author_tag = soup.select_one(
        "#contents > div.prod_detail_header > div > div.prod_detail_view_wrap > div.prod_detail_view_area > div:nth-child(1) > div > div.prod_author_box.auto_overflow_wrap > div.auto_overflow_contents > div > div > a:nth-child(1)")

0개의 댓글

관련 채용 정보