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)")