출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 'selenium' 태그의 글 목록 :: 하나둘셋넷
728x90

메타코드 강의 후기

메타코드M (mcode.co.kr)

 

메타코드M

빅데이터 , AI 강의 플랫폼 & IT 현직자 모임 플랫폼ㅣ메타코드 커뮤니티 일원이 되시기 바랍니다.

mcode.co.kr

Javascript로 만든 페이지에 대응하는 방법을 배울 것입니다.

 

개발자 모드로 박스 컨텐츠의 정보를 확인합니다.

 

박스컨텐츠에 대한 정보는 <a></a> 태그로 되어있는 경우가 많습니다.

클래스 부분의 정보를 복사하여 가져옵니다.

 

box_contents = soup.find_all('a', class_='box-content flex-style')
box_contents

 

가져온 클래스 정보를 코드에 위와 같이 입력합니다.

여러 개의 정보를 가져와야 하므로 "soup.find_all"을 사용했습니다.

 

크롤링이 되지 않는 경우 -> selenium의 webdriver 사용

 

 

크롤링이 되지 않는 경우에는 selenium으로부터 webdriver를 가져와서 크롤링을 진행합니다.

필요한 라이브러리들은 위 사진에서 확인할 수 있습니다.

정적인 페이지의 경우는 Requests와 Beautifulsoup으로 크롤링이 가능하며,

동적인 페이지의 경우는 Selenium을 사용하는 경우에 해당합니다.

 

Selenium을 통한 크롤링 준비

 

 

Selenium의 webdriver를 통하여 웹 드라이버를 실행하는 코드입니다.

해당 코드를 실행하면 새로운 브라우저를 통하여 url 주소에 해당하는 페이지가 실행됨을 확인할 수 있습니다.

wait의 경우 브라우저의 안정적인 실행을 위해 설정하며, 이 경우에는 10초로 설정했습니다.

html 변수에 페이지 소스를 담아 이후 크롤링에 사용할 것입니다.

 

크롤링 시도

 

 

soup = BeautifulSoup(html, 'html.parser')를 통해 soup 변수에 selenium을 통하여 얻은 페이지 소스를 대입하여 크롤링을 시도한 결과 출력에서 볼 수 있듯이 정보를 가져오는 것에 성공했음을 확인할 수 있습니다.

박스 컨텐츠를 가져오는 것이 목적이기 때문에 F12 개발자 모드에서 확인한 클래스 이름인 "box_content flex-style"을 형식에 맞게 입력하였습니다.

태그의 종류는 "a 태그"에 해당합니다.

 

불러온 정보 다루기

 

 

len 함수를 통해 확인할 수 있듯이 현재 box_contents는 리스트 형식이며, 그 안에 값들은 12개가 담겨있습니다.

box_contents[0] 등으로 숫자를 입력하며 각 위치에 어떤 값들이 담겨 있는지 쉽게 확인할 수 있습니다.

태그 정보와 클래스 이름도 확인할 수 있습니다.

리스트 구조이므로 후에 for문 등 다양한 방법으로 데이터를 다루기에 용이한 상태가 되었습니다.

 

원하는 정보 선택 출력

 

 

위의 방식을 통하여 컨텐츠에서 원하는 정보만 출력할 수 있습니다.

box_contents는 리스트 구조이므로 먼저 인덱스 번호를 통해 어떤 정보를 가져올 것인지 정합니다.

해당 요소의 태그와 class 정보는 쉽게 확인할 수 있습니다.

".find()" 안에 확인한 태그 정보와 class 이름을 넣으면 위에서 볼 수 있듯이 필요한 정보를 출력할 수 있습니다.

 

리스트에 정보 담기

 

리스트 구조를 활용하면 페이지에서 원하는 정보들을 편하게 추출하고 관리할 수 있습니다.

url 변수에 기본 주소 + href 정보를 통해 페이지에 대한 주소 정보를 담습니다.

title, body, date 변수에 개발자 모드에서 확인한 태그 정보와 클래스 정보를 활용하여 정보를 담습니다.

반복문의 각 변수들을 해당 리스트에 append하여 정보를 추가합니다.

box_contents의 길이만큼 반복문이 진행됩니다.

 

csv 파일로 저장

 

리스트 구조를 딕셔너리 구조로 변환한 뒤에,

pd.DataFrame() 함수를 사용하여 데이터프레임 변환합니다.

df.to_csv() 함수를 사용하면 데이터프레임 구조의 정보를 csv 파일 형태로 저장할 수 있습니다.

pd.read_csv() 함수를 사용하면 저장된 csv 파일 내용을 확인할 수 있습니다.

728x90

+ Recent posts