one step
[파이썬] 비동기 화면 크롤링하기 (wait 사용하기) 본문
반응형
세 번째
프로젝트세 번째 프로젝트는 이 웹페이지에서 진행합니다.
서버와 ajax 통신 이 이루어지는 페이지이므로, wait 기능을 활용해보고, 여러 페이지로부터 데이터를 추출하는 방법을 학습합니다.
지시사항
1) 저번 실습과 마찬가지로, 웹에 있는 데이터를 구조화된 데이터(Structured Data)로 만들기 위해 class 를 먼저 정의합니다. 멤버 변수로 들어가야할 것은 다음과 같습니다.
영화 제목
해당년도
후보등록 수
수상 개수
2) 각 연도별 링크 요소를 찾습니다.
3) 각 연도별 링크 요소를 하나씩 클릭해가며 모든 영화 데이터를 추출해서 Film 인스턴스로 만들어 film_list 에 추가합니다.
4) 그런데 버튼을 클릭하면 데이터를 서버에서 가져오는 ajax 통신이 이루어집니다. 때문에 로딩에 시간이 걸리게 되어 Wait 기능이 필수적입니다. 이 실습에 적절한 Wait 기능을 추가해서 데이터 추출을 해봅시다.
5) film_list 를 이용해서, 10개 이상 후보에 올랐던 작품의 작품명을 사전순으로 정렬하고, 모두 출력해봅시다.
#초기 코드
from typing import NamedTuple
from selenium import webdriver
class Film:
# 지시사항 1번을 작성하세요.
with webdriver.Firefox() as driver:
driver.get("https://www.scrapethissite.com/pages/ajax-javascript/")
# 지시사항 2번을 작성하세요.
# 지시사항 3번과 4번을 작성하세요.
film_list = list()
# 지시사항 5번을 작성하세요.
# 완성 코드
from typing import NamedTuple
from selenium import webdriver
import time
class Film(NamedTuple):
# 지시사항 1번을 작성하세요.
# def __init__(self, title, year, nominates, awards):
# self.title = title
# self.year = year
# self.nominates = nominates
# self.awards = winawardss
title: str
year: int
nominates: int
awards: int
with webdriver.Firefox() as driver:
driver.get("https://www.scrapethissite.com/pages/ajax-javascript/")
# 지시사항 2번을 작성하세요.
a_list = driver.find_elements_by_class_name('year-link')
# 지시사항 3번과 4번을 작성하세요.
film_list = list()
for a in a_list:
a.click()
time.sleep(3)
tbody = driver.find_element_by_tag_name('tbody')
tr_list = tbody.find_elements_by_tag_name('tr')
for tr in tr_list:
film_list.append(Film(
title = tr.find_element_by_class_name('film-title').text,
year = int(a.text),
nominates = int(tr.find_element_by_class_name('film-nominations').text),
awards = int(tr.find_element_by_class_name('film-awards').text)
))
# 지시사항 5번을 작성하세요.
many_nomi_list = list()
for film in film_list:
if film.nominates >= 10:
many_nomi_list.append(film)
print(sorted(many_nomi_list))
반응형
'이것저것 코드 > 파이썬' 카테고리의 다른 글
[파이썬] 태그 수집, 중복 태그 수 세어 딕셔너리형으로 반환하기 (0) | 2022.09.16 |
---|---|
[파이썬] webdrive 메서드와 url 매개변수가 다른 함수에 있을 때 (0) | 2022.09.16 |
[파이썬] 페이지네이션 있는 페이지에서 값 추출 및 딕셔너리 만들기 (1) | 2022.09.16 |
[파이썬] 국가명, 수도, 면적, 인구 추출해서 정리하기 (1) | 2022.09.16 |
[파이썬] Action chain 사용해서 ID/PW입력받고 로그인 버튼 누르고, 환영 메시지 출력하기 (0) | 2022.09.10 |