selenium beautifulsoup

페이지 정보

작성자 조희승 댓글 0건 조회 2,142회 작성일 21-02-07 21:02

본문

apt install python3-selenium python3-bs4 chromium-chromedriver


a.py -----------------------
#!/usr/bin/python3

from selenium import webdriver
import time

chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')


# selenium에서 사용할 웹 드라이버 절대 경로 정보
chromedriver = '/usr/bin/chromedriver'
# selenum의 webdriver에 앞서 설치한 chromedirver를 연동한다.
driver = webdriver.Chrome(chromedriver, chrome_options=chrome_options)
# driver로 특정 페이지를 크롤링한다.
driver.get('https://auto.naver.com/bike/mainList.nhn')

print("+" * 100)
print(driver.title)  # 크롤링한 페이지의 title 정보
print(driver.current_url)  # 현재 크롤링된 페이지의 url
print("바이크 브랜드 크롤링")
print("-" * 100)


# 바이크 제조사 전체 페이지 버튼 클릭
bikeCompanyAllBtn = driver.find_element_by_css_selector("#container > div.spot_main > div.spot_aside > div.tit > a")
bikeCompanyAllBtn.click()

time.sleep(3)

# 바이크 제조사 1번 페이지 진입해서 바이크 리스트 추출
allBikeCompanyElement = driver.find_elements_by_css_selector(
    "#_vendor_select_layer > div > div.maker_group div.emblem_area > ul > li")

# 바이크 첫 페이지 크롤링
for item in allBikeCompanyElement:
    bikeComName = item.find_element_by_tag_name("span").text
    if (bikeComName != ''):
        print("바이크 회사명:" + bikeComName)
        ahref = item.find_element_by_tag_name("a").get_attribute("href")
        print('네이버 자동차 바이크제조사 홈 sub url:', ahref)
        imgUrl = item.find_element_by_tag_name("img").get_attribute("src")
        print('바이크 회사 엠블럼:', imgUrl)

time.sleep(3)

# 바이크 제조사 리스트의 다음 페이지 버튼을 찾아서 클릭하자.
nextBtn = driver.find_element_by_css_selector(
    "#_vendor_select_layer > div > div.maker_group > div.rolling_btn > button.next")
# 다음 바이크 제조사 페이지 버튼이 활성화 여부
isExistNextPage = nextBtn.is_enabled()

if (isExistNextPage == True):
    print("다음 페이지 존재함=======================================>")
    nextBtn.click()
    allBikeCompanyElement = driver.find_elements_by_css_selector(
        "#_vendor_select_layer > div > div.maker_group div.emblem_area > ul > li")
    for item in allBikeCompanyElement:
        bikeComName = item.find_element_by_tag_name("span").text
        if (bikeComName != ''):
            print("바이크 회사명:" + bikeComName)
            ahref = item.find_element_by_tag_name("a").get_attribute("href")
            print('네이버 자동차 바이크제조사 홈 sub url:', ahref)
            imgUrl = item.find_element_by_tag_name("img").get_attribute("src")
            print('바이크 회사 엠블럼:', imgUrl)

# 크롤링이 끝나면 webdriver 브라우저를 종료한다.
# driver.quit()

----------------------------------------



b.py ---------------------------
#!/usr/bin/python3

from selenium import webdriver
from bs4 import BeautifulSoup
import time

chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')


# selenium에서 사용할 웹 드라이버 절대 경로 정보
chromedriver = '/usr/bin/chromedriver'
# selenum의 webdriver에 앞서 설치한 chromedirver를 연동한다.
driver = webdriver.Chrome(chromedriver, chrome_options=chrome_options)
# driver로 특정 페이지를 크롤링한다.
driver.get('https://search.shopping.naver.com/search/all?query=선물세트')




SCROLL_PAUSE_SEC = 1
# 스크롤 높이 가져옴
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 끝까지 스크롤 다운
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # 1초 대기
    time.sleep(SCROLL_PAUSE_SEC)

    # 스크롤 다운 후 스크롤 높이 다시 가져옴
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height


#print(driver.page_source)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

f = open("tmp/index.html", 'w')
f.write(soup.prettify())
f.close()



# 크롤링이 끝나면 webdriver 브라우저를 종료한다.
driver.quit()

----------------------------------------------

댓글목록

등록된 댓글이 없습니다.