기계는 거짓말하지 않는다

Python Crawling 본문

Python

Python Crawling

KillinTime 2021. 7. 19. 21:19

웹 크롤링(Crawling)

웹 사이트에 있는 특정 정보를 추출하는 기술을 말한다. 다양한 웹 사이트에서

Text, Image, Audio 등을 추출할 수 있다.

 

HTML 구조를 분석하고 로그인 처리 등이 필요하다.

아래는 Selenium과 BeautifulSoup를 이용한 크롤링 예이다.

 

네이버 영화 순위

from selenium import webdriver
from bs4 import BeautifulSoup

driver_path = './chromedriver'

driver = webdriver.Chrome(driver_path)
driver.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn')

driver.implicitly_wait(3)
html = driver.page_source
soup = BeautifulSoup(html)

g = soup.select('.title')
ranking = 1

for i in g:
    title = i.a.text
    print(f"{ranking}위: {title}")
    ranking += 1

실행 결과

네이버 영화 네티즌 평점 페이지 별 점수, 제목, 전체 평균 점수

from selenium import webdriver
from bs4 import BeautifulSoup

driver_path = './chromedriver'

driver = webdriver.Chrome(driver_path)

df = pd.DataFrame(columns=["영화제목", "점수"], dtype="int64")
start_page = 1
end_page = 3

for i in range(start_page, end_page + 1):
    driver.get("https://movie.naver.com/movie/point/af/list.nhn?&page=" + str(i))

    driver.implicitly_wait(3)
    html = driver.page_source
    soup = BeautifulSoup(html)

    list_title = driver.find_elements_by_css_selector(".title")

    print(str(i) + " Page", "--" * 20)
    print()
    for title in list_title:
        mtitle = title.find_element_by_css_selector('a').text
        score = title.find_element_by_css_selector(".list_netizen_score em").text

        print(title.find_element_by_css_selector('a').text, 
        title.find_element_by_css_selector(".list_netizen_score em").text)

        df = df.append({"영화제목":mtitle, "점수":int(score)}, ignore_index=True)
    print()

print(f"{start_page} ~ {end_page} Page 평균")
df = df.groupby(by=["영화제목"]).mean().sort_values(by=["점수"], ascending=False)
print(df)
driver.close()

'Python' 카테고리의 다른 글

Python BeautifulSoup 사용법, 속성  (0) 2021.07.20
Python Selenium, BeautifulSoup  (0) 2021.07.19
Python OpenCV (4) 이미지 편집  (0) 2021.07.14
Python OpenCV (3) 이미지 편집  (0) 2021.07.14
Python OpenCV (2) 도형 그리기  (0) 2021.07.13
Comments