티스토리 뷰
driver.maximize_window()#창 최대화
#지금은 레이아웃 바뀜
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x 64) A~url~~",
"Accept-Language":"ko-KR,ko"
}
#글로벌 페이지의 경우에는 url로 그냥 접속할경우 한글 버전에서 영어 버젼으로 넘어가는 경우가 있다. 그러므로 한국에서 접속한다는 것을 알려주기 위함 + 만약 한글 페이지가 있으면 한글 페이지 반환
movies = soup.find_all("div", attrs= {"class:":"ImZGtf mpg5gc"})
print(len(movies))
#파일로 저장해서 열람
with open("movie.html", "w", encoding="utf-8") as f:
#f.write(res.text)
f.write(soup.prettify()) # res.text 보다 html 문서를 보다 정돈된 상태로 예쁘게 출력
for movie in movies:
title = movie.find("div", attrs={"class":"WsMG1c nnk0zc"}).get_text()
print(title)
동적 페이지 크롤링을 위한 스크롤링 등
driver.execute_script("window.scrollTo(0,1080)") # 디스플레이 설정 메뉴에서 pc해상도 확인하면 됨 여기서는 1920 x 1080
#모니터(해상도) 높이인 1080 위치로 스크롤 내리기
driver.execute_script("window.scrollTo(0,2080)")
#스크롤을 더 많이 해주는 것
#화면 가장 아래로 스크롤 내리기
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") #화면의 가장 마지막 부분까지 스크롤 밑으로 내린다는 의미
마지막까지 스크롤을 내렸을때 멈추는 방법
interval = 2 #2초에 한 번씩 스크롤 내림
prev_height = driver.execute_script("return document.body.scrollHeight")
OR 조건을 통해 관련 데이터 다 끌고오기
#현재 위치 저장
while True:
#스크롤을 가장 아래로 내릴때 까지 반복함
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") #화면의 가장 마지막 부분까지 스크롤 밑으로 내리는 것.
#페이지 로딩 대기
time.sleep(interval)
#현재 문서 높이를 가져와서 저장
curr_height = driver.excute_script("return document.body.scrollHeight")
if curr_height == prev_height:
break
prev_height = curr_height
print("스크롤 완료")
movies = soup.find_all("div", attrs= {"class:":["ImZGtf mpg5gc","Vpfmgd"]})
##[ , ] 클래스가 이 리스트 안에 일치하는 모든것들 (OR) 을 가지고 오는것이다. -> 이를 명명해서 List 라고 한다.
print(len(movies))
for movie in movies:
title = movie.find("div", attrs={"class":"WsMG1c nnk0zc"}).get_text()
print(title)
#html 분석 결과, 스크롤 한 번 내리고 나면 WsMG1c nnk0zc 클래스가 아닌 다른 클래스로 영화 이름이 선언되어있다.
#그러므로 47번째 줄에서 [] list를 통해 여러 조건을 만족하는 모두를 끌고 오도록 선언
Headless Chrome -> Chrome 창을 직접적으로 띄우지 않고 자동 실행되게끔 하는것
##크롬창을 안띄우고 동작하게끔 하는 것! -> 이렇게 하면 실제로 display 안되기 때문에 메모리를 적게 잡아먹고 속도도 빨라진다!
options = webdriver.ChromeOptions()
options.headless = True
options.add_argument("window-size=1920x1080")
#headless로 인해 직접 눈에 보이진 않지만, 해당 단계에서의 머무르고 있는 크롬 화면을 스크린 샷 찍어서 정말 잘 작동하는지 확인 가능하다.
driver.get_screenshot_as_file("google_movie.png")
driver.quit()
##유의할 점! Headliss chrome을 사용하게 되면 User-agent가 작동이 안되거나, 작동이 되더라도 사이트에 의해 막힐 수 있다.
#해결 방법 -> options.add.argument("user-agent=유져에이젼트 주소") 로 하면 된다!