from selenium import webdriver
import time
# 뷰티풀수프 임포트
from bs4 import BeautifulSoup
# 웹 드라이버 활성화 및 알라딘 홈페이지로 이동합니다.
driver = webdriver.Chrome('C:/Users/WiTHUS/Desktop/java_web_jiin/python/chromedriver.exe')
time.sleep(0.5)
driver.find_element_by_xpath('//*[@id="re_mallmenu"]/ul/li[3]/div/a/img').click()
time.sleep(0.5)
# selenium으로 현재 페이지 html 소스코드를 전부 불러옵니다.
src = driver.page_source
print(src)
time.sleep(1)
#selenium 으로 현재 페이지의 html 소스코드를 전부 불러옵니다.
src = driver.page_source
# 뷰티풀수프 객체를 생성합니다.
# 뷰티풀수프 객체를 생성하면서, 셀레늄이 가지고 온 html 소스코드를 제공하고,
# 해당 소스코드를 html 문법으로 변환하라는 주문입니다.
soup = BeautifulSoup(src, 'html.parser')
# 뷰티풀수프를 사용하여 수집하고 싶은 데이터가 들어 있는 태그를 부분 추출할 수 있습니다.
# find_all() 메서드는 인수값으로 추출하고자 하는 태그의 이름을 적으면
# 해당 태그만 전부 추출하여 리스트에 담아 대입합니다.
div_list = soup.findAll('div', class_='ss_book_box')
# print('div_list에 들어 있는 데이터의 수: ', len(div_list))
# print(div_list[0]) 1위 책만 가져오세요.
first_book = div_list[0].find_all('li')
# print(first_book)
# text는 태그를 제외한 사용자가 실제로 브라우저에서 확인 가능한
# 텍스트만을 추출하여 문자열 형태로 반환합니다.
book_title = first_book[1].text
book_author = first_book[2].text
book_price = first_book[3].text
auth_info = book_author.split('|')
print('# 제목: ', book_title)
print('# 저자: ', auth_info[0])
print('# 출판사: ', auth_info[1])
print('# 출판일: ', auth_info[2])
print('# 가격:', book_price.split(', ')[0])
from selenium import webdriver
import time
from bs4 import BeautifulSoup
from datetime import datetime
d = datetime.today()
file_path = f'C:/Users/WiTHUS/Desktop/java_web_jiin/python/crawling/알라딘 베스트셀러 1~50위_{d.year}_{d.month}_{d.day}.txt'
'''
# with문을 사용하면 with 블록을 벗어나는 순간 객체가 자동으로 해제됩니다.
(java의 try with resource와 비슷합니다.)
# with 작성 시 사용할 객체의 이름을 as 뒤에 작성해 줍니다.
'''
'''
* 표준 모듈 codecs
- 웹이나 다른 프로그램의 텍스트 데이터와 파이썬 내부의 텍스트 데이터의 인코딩 방식이 서로 다른 경우에,
내장함수 open()이 제대로 인코딩을 적용할 수 없어서 에러가 발생합니다. (UnicodeEncodeError)
'''
with codecs.open(file_path, mode='w', encoding='utf-8') as f:
driver = webdriver.Chrome('C:/Users/WiTHUS/Desktop/java_web_jiin/python/chromedriver.exe')
time.sleep(0.5)
driver.find_element_by_xpath('//*[@id="re_mallmenu"]/ul/li[3]/div/a/img').click()
time.sleep(0.5)
src = driver.page_source
soup = BeautifulSoup(src, 'html.parser')
div_list = soup.findAll('div', class_='ss_book_box')
rank = 1
for div in div_list:
book_info = div.find_all('li')
if book_info[0].text[0] != '[':
book_title = book_info[0].text
book_author = book_info[1].text
book_price = book_info[2].text
else:
book_title = book_info[1].text
book_author = book_info[2].text
book_price = book_info[3].text
auth_info = book_author.split('|')
f.write(f'# 순위: {rank}위 \n')
f.write(f'# 제목: {book_title}위 \n')
f.write(f'# 저자: {auth_info[0]} \n')
f.write(f'# 출판사: {auth_info[1]} \n')
f.write(f'# 출판일: {auth_info[2]} \n')
f.write(f'# 가격:' + book_price.split(', ')[0] + '\n')
f.write('-' * 40 + '\n')
rank += 1
'''
* 표준 모듈 datetime
- 운영 체제의 현재 시간과 날짜 정보를 파이썬 내부로 읽어오는 기능을 제공하는 모듈입니다.
'''
from datetime import datetime
# 오늘 날짜와 현재 시간 정보를 가지고 있는 객체를 리턴합니다.
d = datetime.today()
print(d)
print(f'지금은 {d.year}년 {d.month}월 {d.day}일 {d.hour}시 {d.minute}분 {d.second}초입니다.')
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from bs4 import BeautifulSoup
from datetime import datetime
# 엑셀처리 모듈 임포트
import xlsxwriter
# user-agent 정보를 변환해 주는 모듈 임포트
# 특정 브라우저로 크롤링을 진행할 때 차단되는 것을 방지
from fake_useragent import UserAgent
# 이미지를 바이트 변환 처리 모듈
from io import BytesIO
# 요청 헤더 정보를 꺼내올 수 있는 모듈
import urllib.request as req
d = datetime.today()
file_path = f'C:/Users/WiTHUS/Desktop/java_web_jiin/python/crawling/알라딘 베스트셀러 1~50위(new)_{d.year}_{d.month}_{d.day}.xlsx'
# User Agent 정보 변환 (필수는 아닙니다.)
opener = req.build_opener() # 헤더 정보를 초기화합니다.
opener.addheaders = [('User-agent', UserAgent().ie)]
req.install_opener(opener) # 새로운 헤더 정보를 삽입합니다.
# 엑셀 처리 선언합니다.
# workbook 객체를 생성하여 엑셀 파일을 하나 생성합니다. (매개값으로 저장될 경로를 지정합니다.)
workbook = xlsxwriter.workbook(file_path)
# worksheet 생성합니다.
worksheet = workbook.add_worksheet()
# 브라우저를 뜨지 않게 하는 방법
chrome_option = Options()
chrome_option.add_argument('--headless')
# 브라우저 설정 - 일반 모드
browser = webdriver.Chrome('C:/Users/WiTHUS/Desktop/java_web_jiin/python/chromedriver.exe')
# # 브라우저 설정 - headless 모드
# browser = webdriver.Chrome('C:/Users/WiTHUS/Desktop/java_web_jiin/python/chromedriver.exe', options=chrome_option)
# 브라우저 사이즈 조정
browser.set_window_size(800, 600)
# 브라우저 내부 대기 (전체 로딩될 때까지 대기 후 남은 시간은 무시합니다.)
browser.implicitly_wait(10)
# 베스트 셀러 홈페이지 이동합니다
# 엑셀에 텍스트를 저장합니다.
cell_format = workbook.add_format({'bold': True, 'font_color': 'red', 'bg_color':'yellow'})
worksheet.write('A1', '썸네일', cell_format)
worksheet.write('B1', '제목', cell_format)
worksheet.write('C1', '작가', cell_format)
worksheet.write('D1', '출판사', cell_format)
worksheet.write('E1', '출판일', cell_format)
worksheet.write('F1', '가격', cell_format)
worksheet.write('G1', '링크', cell_format)
while True:
# bs4 초기화
soup = BeautifulSoup(browser.page_source, 'html.parser')
div_ss_book_box_list = soup.find_all('div', class_='ss_book_box')
for div_ss_book_box in div_ss_book_box_list:
# 이미지
img_url = div_ss_book_box.select_one('table div > a > img.i_cover')
print(img_url)