Selenium + Python으로 스크래핑 1
마지막 회의
전회 Goutte를 사용해 로그인 후의 페이지 정보를 취하려고 하는 것도, 화상 인증에 의해 참패했습니다.
htps : // 이 m/시오하루_/있어 ms/818154 아 c145c78076487
그래서 이번에는 수단을 바꾸고 Selenium + Python으로 스크래핑을 할까 생각합니다!
소개
Windows 10에서 Vagrant, VirtualBox를 사용하여,
가상 환경의 CentOS7.0에 Selenium, Python 및 ChromeDriver를 배포합니다.
선인의 지혜를 참고로 도입했습니다.
htps : // rkぉg. 베/아 r치ゔぇs/3422
사용해보기
sample.pyfrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
driver = webdriver.Chrome(options=options)
driver.get('https://www.yahoo.co.jp/')
driver.save_screenshot('test.png')
driver.quit()
막상 실행python sample.py
무사히, yahoo의 톱 페이지가 캡쳐 되었기 때문에 샘플은 괜찮을 것 같네요!
마지막 과제
지난번에는 이미지 인증이 있었고 로그인 후 화면을 표시할 수 없었습니다.
Selenium이라면 대기 처리가 있으므로 그 사이에 수동으로 로그인하면 이미지 인증 페이지에도 갈 수 있을 것!
라고 생각하고 있었습니다만, Chrome의 프로필 패스를 지정해 주는 것으로 지정한 프로필의 상태를 유지해 주는 것을 알았습니다.
htps : // 나비 t 후오 t. xy · 세이 니우 m-ch 로메 - p 로후 ぇ /
결국 미리 수동으로 로그인한 상태의 프로필 경로를 지정해 주면 된다고 하는 것이군요.
그것은 간결하게 되어 고맙다.
이번은 가상 환경의 CentOS를 사용하고 있는 것이므로, 마운트처에 windows환경의 심볼릭 링크를 붙이면 거기로부터 참조해 주는 것은 아니라고 생각했습니다.
예
mklink /J "C:\Users\[ユーザー名]\Desktop\work\vagrant\User Data" "C:\Users\[ユーザー名]\AppData\Local\Google\Chrome\User Data"
샘플 소스를 다시 작성하여 실행해 봅니다.
sample2.pyfrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=シンボリックリンクを貼ったプロフィールパス')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.save_screenshot('test2.png')
driver.quit()
그런데 꽤
거기에는 무자비하게 비 로그인 상태의 이미지가 캡처되었습니다 ...
원인으로는 역시 프로필 경로의 참조가 잘 되어 있지 않았습니다.
가상 환경에 설치하고 있는 chrome의 프로필과 windows측의 chrome의 프로필의 차이 등이 있으니까요…
그래서 무리하게 가상 환경에서 묶는 의미도 특별히 없기 때문에 윈도우 측에 Python과 Selenium을 도입하여 실행하고 싶습니다.
Windows 측 환경 설정
참고 : h tps://my ぃふぇ8. 네 t / an s ta l-se 니 m an d u r-on-u und ws /
파이썬
htps //w w. py 응. 오 rg / 도 w 응 아 ds /
인스톨러에 따를 뿐이므로 특기사항 없음
셀레늄
Python 배포 후 명령 프롬프트에서 다음 실행으로 설치할 수 있습니다.pip install selenium
ChromeDriver
htps : // / s. 오, ぇ. 코 m/아/ch 로미우 m. 오 rg / ch rome dri ゔ ぇ r / w
Chrome 버전과 동일한 ChromeDriver를 다운로드합니다.
chromedriver.exe의 위치는 어디서나 좋지만, 쉽게 Python과 같은 위치에 넣었습니다.C:\Users\[ユーザー名]\AppData\Local\Programs\Python\Python38\chromedriver.exe
환경 변수의 PATH도 위에서 설정했습니다.
windows 측에서 실행
미리 Chrome에서 htps: //p. 그래. 573. jp / game / 2dx / 27 / rankin g / uee kly. HTML로 로그인 한 후,
Chrome을 닫아 둡시다.
소스를 아래에 다시 작성 실행!
sample3.pyfrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=C:\\Users\\[ユーザー名]\\AppData\\Local\\Google\\Chrome\\User Data')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.save_screenshot('test3.png')
driver.quit()
안전하게 잡혔습니다!
실제로 원하는 부분은 랭킹의 부분이므로 랭킹의 부분에 도달할 수 있는지 실험.
원하는 부분을 표시하기 위해 클릭을 하거나 페이지 위치를 조절해 봅니다.
sample4.pyfrom selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=C:\\Users\\[ユーザー名]\\AppData\\Local\\Google\\Chrome\\User Data')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.find_element_by_xpath("/html/body/div/div[1]/div/div/div[2]/div/div[2]/form/div[2]/ul[1]/li[3]/input").click()
time.sleep(3)
driver.execute_script("window.scrollTo(0, 800)")
time.sleep(3)
driver.save_screenshot('sample.png')
driver.quit()
괜찮아요!
총평
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
driver = webdriver.Chrome(options=options)
driver.get('https://www.yahoo.co.jp/')
driver.save_screenshot('test.png')
driver.quit()
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=シンボリックリンクを貼ったプロフィールパス')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.save_screenshot('test2.png')
driver.quit()
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=C:\\Users\\[ユーザー名]\\AppData\\Local\\Google\\Chrome\\User Data')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.save_screenshot('test3.png')
driver.quit()
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-data-dir=C:\\Users\\[ユーザー名]\\AppData\\Local\\Google\\Chrome\\User Data')
driver = webdriver.Chrome(options=options)
driver.get('https://p.eagate.573.jp/game/2dx/27/ranking/weekly.html')
driver.find_element_by_xpath("/html/body/div/div[1]/div/div/div[2]/div/div[2]/form/div[2]/ul[1]/li[3]/input").click()
time.sleep(3)
driver.execute_script("window.scrollTo(0, 800)")
time.sleep(3)
driver.save_screenshot('sample.png')
driver.quit()
Reference
이 문제에 관하여(Selenium + Python으로 스크래핑 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shioharu_/items/225f38c23a652459962f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)