반응형

안녕하세요. 

 

오늘은 웹크롤링에 대해 글을 쓰도록 하겠습니다.

 

제가 웹크롤링을 공부해야지! 해서 공부한게 아니라 일을 돕고자 자동화를 찾아보다

 

Beautifulsoup과 Selenium을 알게 되었습니다.

 

제가 일을 돕기 위해 만드는 프로그램은 전화번호를 자동적으로 따오는 프로그램입니다.

 

굳이 웹크롤링을 공부할 때 자바 스크립트 같은 언어는 몰라도 됩니다.

 

Beautifulsoup는 홈페이지에 대한 내용을 불러오는 라이브러리이고,

 

Selenium은 자동화를 구현하는 라이브러리입니다.

 

이 두 가지 라이브러리만 안다면 구현하는데 웬만한 자동화프로그램은 만들 수 있다고 생각합니다.

 

제가 만든 매크로 프로그램도 웹기반 지식을 모르는 상태에서 3일을 거쳐 만들었습니다. 

 

동영상으로 보여드리고 싶지만, 프로그램 자체에 손님들의 전화번호등이 있어, 제가 모자이크를 다 처리한 상태에서 동영상을 올릴 생각입니다. 

 

 

저는 웹크롤링을 하기 위해 기본이 아닌, 제가 프로그램을 구현하면서 막혔던 부분을 작성하도록 하겠습니다. 

 

iframe : 웹페이지 안의 또다른 웹페이지

 

프로그램을 구현할 때 가장 어려웠던 문제 중 하나가 iframe 문제였습니다.

 

처음에 

[selenium]

driver.find_element_by_xpath() : 절대 경로

 

driver.find_element_by_id() : id값

 

driver.find_element_by_name() : 이름

 

driver.find_element_by_tag_name() : 태그 이름

 

어지간하지 않고서야 이 4가지 함수로 구현할 수 있습니다.

 

iframe은 4가지 방법으로 불가능합니다. 사용할 시

 

stale element reference: element is not attached to the page document selenium.common.exceptions.NoSuchElementException: 

Message: no such element: Unable to locate element

 

이런 무시무시한 에러를 보시게 될겁니다. 

 

iframe은 웹페이지 안에 또 다른 자식 웹페이지이기 때문에 다른 접근 방법을 사용해야 합니다.

 

우선 우리들은 자바스크립트를 열어보기 전에 iframe을 확인할 수 있습니다.

 

 

 

첫 번 째:

iframes = driver.find_elements_by_tag_name('iframe')

for i in iframes:

     print(i)

 

print를 찍어서 자신이 찾고자 하는 iframe 어디 있는지 확인합니다.

만약 자신이 원하는 값이 iframe[0]에 있다고 가정합시다.

iframe[0]으로 프레임으로 위치를 옮깁니다.

 

 

두 번 째:

[selenium]

driver.switch_to.frame(iframes[0])

 

이제 위치가 iframes[0]로 옮겨 졌다면, 

 

 

세 번 째:

[selenium]

html = driver.page_source

 

iframes[0]의 현주소를 받아옵니다.

 

 

네 번 째:

[beautifulsoup]

soup = BeautifulSoup(html, 'html.parser')

 

html을 파싱합니다.

 

 

다 섯 번 째:

[beautifulsoup]

soup.find()

soup.find_all()

 

이제 자신이 수행하고자 하는 함수를 구현합니다.

 

 

여 섯 번 째:

[selenium]

driver.switch_to.default_content()

 

다시 원래 프레임으로 돌아갑니다.

 

이런식으로 한다면 iframe을 처리할 수 있습니다.

 

다음 additem박스를 접근하는 select에 대해 글쓰도록 하겠습니다.

 

728x90
반응형

+ Recent posts