너무 맨땅에 박치기 해버리니까 막히는게 너무 많았다. 약간 기본에 충실해보기 위해서 아래 강의를 한 번 따라가보았다.
https://www.youtube.com/watch?v=1b7pXC1-IbE
1. 가상환경 만들기
python venv 가상환경이라고 구글에 치면 아래와 같이 나오고
가상환경 만들기는 이런 명령어를 가진다고 나온다.
이미 만들어져있긴 하지만, Terminal의 New terminal을 열어서 아래와 같이 입력해보자. selenium은 그냥 아무이름이나 친 것이다. selenium으로 크롤링 할 것이니까 selenium으로 해보자! (조코딩 님 말씀)
ython -m venv selenium
그럼 이렇게 가상환경이 나타난다. 가상환경이 필요한 이유는 모듈이나 파이썬 버전에 따라 지원되는 기능이 다를 수 있는데, 그에 맞게 유연하게 대처하기 위해서라고 한다. 뭐 쓰다보면 왜 그런지 알겠지 !
이 가상환경으로 들어가려면 cd (change directory)에다가 아래와 같이 terminal에 엔터 엔터를 쳐주면된다.
cd selenium\scripts
activate
그러면 아래와 같이 가상환경에 들어왔다는 (selenium) 표시를 해준다. 만약에 여기서 pip install ~ 이런 것을 해주면 나의 컴퓨터 환경과는 독립적으로 가상환경에서 module을 설치하게 된다고 한다.
여기다가 pip install selenium==3.141 을 깔아보도록 하자. (신규버전은 강의 버전과 약간 안맞는게 있다고 함.)
잘 깔린 것을 알 수 있다. urllib3이라는 패키지도 같이 깔렸다.
2. 드라이버 설치
이건 왜 하는지 잘 모르겠지만, 파이썬 내에서 환경이 인식하는 드라이버를 깔아줘야 하는 모양새 인 것 같다. 그래서 chorme driver를 깔아주도록 한다. 먼저 오른쪽 위 새로로 되어있는 ...을 누르고 도움말에 크롬정보를 누르면
나는 아래와 같이 뜬다.
https://chromedriver.chromium.org/downloads
위와 같이 크롬드라이버를 설치하는 사이트에서 그에 맞는 버전을 맞춰주면 되는데 나는 버전 109인 것 같다. 109.0~을 깔아주자. 그리고 내 운영체제에 맞는 것을 선택하면된다. (Win32)
그리고 다운받으면 chromedriver.exe라는 파일이 생기는데 이것을 아까 만든 그 selenium폴더에 넣어보자.
그럼 아래와 같이 아까 만든 가상환경에 chromedriver.exe가 생성된다. 여기에 new file을 눌러 google.py라고 이름을 지어보자.
3. 예시 코드를 갖다 쓰기
코딩 하는 사람들은 예시코드를 갖다써서 거기서 수정을 하는 방식으로 자신의 코드를 만드는 것 같다. 따라가보자. 공식 홈페이지에 나온 selenium code를 그냥 긁어와본다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element(By.NAME, "q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
이 때, 코드에 selenium에 빨간 줄이 뜬다면 패키지가 다운받아져있지 않은 것을 의미하기 때문에 아래와 같이 환경을 바꿔준다. 이때는 환경을 바꿔야 하는데, 오른쪽 밑에 3.10.9 이것을 누르면 Select interpreter가 나온다. 이걸 눌러서 환경을 바궈주면 된다. 나는 이미 선택되어 있다.
어랏 google.py가 밖에 나와있어서 selenium안으로 다시 넣어줬다.
모듈을 불러오는 맨 윗줄 2개 제외 아래 두줄을 제외하고 CTRL + / 을 누르면 주석처리가 된다. 일단, 주석처리를 해보자.
여기서 Firefox로 되어있으니까 이걸 chrome으로 바꾸고 실행해보자.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.python.org")
그 전에 google.py가 있는 디렉토리에서 실행을 해야하니 그 디렉토리로 들어가서 실행해보자. 나는 cd\ 라고 입력해서 다시 d:\로 돌아왔고, 거기서 cd python, cd selenium을 입력했다.
cd\ #이러면 제일 위 directory로 옮겨옴
cd python
cd selenium
이런 느낌으로 진행된다. 그러면 selenium 디렉토리 위에 와있는 셈임 여기다가 google.py를 입력하게되면
나는 이렇게 한번 떠서 python을 눌렀고, 그 다음에 뭔가 cmd창에서 오류가 떠서 재차 google.py를 terminal에 넣었더니 아래와 같이 방화벽 화면이 한 번 떴다.
그래서 이걸 엑세스 허용누르니까 아래와 같이 'Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다.'라는 창이 뜨면서 크롬창이 하나 열리게 된다.
불러온 웹드라이버 모듈이 chrome을 열고 그걸 driver객체에 저장한다. 그 driver에서 url을 여는 것이다.
4. 이제 원래 하려던 이미지를 검색해보자.
구글의 이미지 검색하는 창이 따로 있다. 그 URL은 아래와 같다.
https://www.google.co.kr/imghp?hl=ko&authuser=0&ogbl
그리고 여기서 음.. 요즘 핫한 더 글로리의 박연진을 검색해서 이미지를 크롤링해본다고 가정해보자. 특정 검색어를 검색하는 것 까지 자동화를 하면 파이썬에서는 아래와 같이 코드를 입력하면 된다. 마지막 1줄만 추가되었다.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.python.org")
elem = driver.find_element(By.NAME, "q")
find를 하는 방식에는 굉장히 많은 방식이 숨어져 있다. 새로 find_만 치면 여러가지 방식이 나타난다. 어떤게 적절할지 확인을 해봐야한다.
위에 구글 이미지 검색 창에서 그럼 find할 때, 어떤 방식이 가장 적절한지 찾아야한다. 그걸 찾기위해서 이미지 검색에 들어가서 살펴보자. 구글 이미지 창에서 F12를 누르고 요소 옆옆에 있는 마우스 화살표 같은 아이콘 (inspector)를 누르면 화면에 뜬 요소들이 HTML에 어떤 곳에 해당되는지 도시해준다.
이렇게 검색 입력창에다가 inspector를 갖다 대면 해당되는 html이 도시된다.
그러면 내용중에 class를 선택하여 element를 골라도 되겠고, name을 이용하여 찾아도 되겠고, 여러가지 방식으로 해당되는 요소를 찾을 수 있다. 아까 코드에서는 elem = driver.find_element(By.NAME, "q") 으로 되어있었으니까 name 'q'로 찾겠다는 의미이다. 그러니까 q인걸 선택하면 된다. 그럼 여기까지는 파이썬이 검색창을 찾는 행위를 한 것이다.
입력은 그 밑에 주석처리 해놓았던 예시문들 중 elem.send_keys("")로 입력할 수 있다. 그리고 엔터키를 눌러 검색을 하려면 그 밑에있는 elem.send_keys(Keys.Return)을 추가입력해주면 된다. 그럼 이렇게 추가하는 것이다!
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.python.org")
elem = driver.find_element(By.NAME, "q")
elem.send_keys("박연진")
그럼 여기까지해서 구글 이미지 창에서 박연진이 검색되는 것을 알 수 있다.
(2편에서)
'일상 > 공학' 카테고리의 다른 글
[기사] 생성형 인공지능 신약 설계도 한다? 임상 2상까지 갔다 (0) | 2023.07.06 |
---|---|
파이썬 크롤링 따라 해보는 기록 (구글 이미지 크롤링 + 업무자동화) 조코딩 님과 함께 - 2 (0) | 2023.01.25 |
댓글