ubuntu에서 selenium과 Phantomjs를 사용해서 스크래핑해오기

2018. 3. 29. 01:13Python-이론/python-인공지능2

phantomjs와 selenium설치하기



//selenium설치 
pip3 install selenium 
//Beautifulsoup4 설치
pip3 install Beautifulsoup4
//PhantomJS에 필요한 라이브러리 설치 
apt-get install -y wget libfontconfig
//바이너리를 내려받고 설치하기
mkdir -p /home/root/src && cd $_
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar jxvf phantomjs -2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin/ 


한줄 씩 차례대로 작성 해서 다 다운받으면된다. 이번엔 selenium을 통해 네이버의 시작화면을 스크린샷찍어와 보겠다.



from selenium import webdriver url = "https://www.naver.com" #phantomjs 불러옴 browser = webdriver.PhantomJS() #3초 대기 browser.implicitly_wait(3) browser.get(url) #Website.png로 결과를 결정하겠다. browser.save_screenshot("Website.png") browser.quit()





위의 사진과 같이 실행되면 성공된다. 그리고 Webpage.png가 생성된다. 결과물을 확인하면 아래와 같다. 





로그인을 해서 selenium 사용하기



이번에는 로그인을 해서 티스토리 방문객 수를 가져와보겠습니다.


from selenium import webdriver
import json
id = "yourId"
pw = "yourpw"
browser = webdriver.PhantomJS()
browser.implicitly_wait(3)

url ="https://www.tistory.com/auth/login"

browser.get(url)

#사이트 마다 id나 pw의 form id 값이 다를 수 있습니다. 
e= browser.find_element_by_id("loginId")
e.clear()
e.send_keys(id)
e = browser.find_element_by_id("loginPw")
e.clear()
e.send_keys(pw)
#물론 로그인 버튼을 선택할 때도 사이트 마다 다릅니다.
form = browser.find_element_by_css_selector("button.btn_login[type=submit]")
form.submit()

browser.get("http://hoony-gunputer.tistory.com/manage")

results = browser.find_elements_by_tag_name("dd")
for result in results:
    print(result.text)
browser.quit()




처음에 실행하면 경고문 등이 나오는데 무시해도 좋습니다.. 그리고 find_element_by_css_selector("button.btn_login[type=submit]") 말고도 요소를 찾을 수 있는 방법이 많은데 이것은 https://selenium-python.readthedocs.io/ 해당 사이트를 확인하시거나 자동완성 되기전 키워드를 쳐보면 아래와 같이 확인할 수 있습니다.




find_element와 find_elements라는 두개의 큰 분류로 나뉘는데 elements는 다수의 요소를 가져올 수 있습니다. 하지만 다수의 요소를 가져오기 때문에 id값으로는 찾을 수 없습니다. id는 고유한 값이니깐요!!