5.11 Recursive
indeed 역시 weworkremotely 사이트와 마찬가지로 구인구직 사이트 이다.
weworkremotely 에서 했듯이 동작방법을 알아본다.
검색창에 python 을 검색하고 어떤 방식으로 동작하는지 알아본다.
jobs?q= 부분에 검색하고 싶은 키워드를 입력하면 된다.
이전에 만들었던 main.py 파일로 들어가서
base_url → 검색에 필요한 최소 url
search_term → 검색어(키워드)
response → base_url 과 search_term 변수를 합친 전체 url
status_code != 200 으로 접속한 웹페이지가 정상인지 확인
( status_code 관련 게시물은 여기를 클릭 )
response.text ( html 코드를 가져온다. )
from requests import get
from bs4 import BeautifulSoup
from extractors.wwr import extract_wwr_jobs
base_url = 'https://kr.indeed.com/jobs?q='
search_term = 'python'
response = get(f'{base_url}{search_term}')
if response.status_code != 200:
print("Can't request page")
else:
print(response.text)
출력값:
Can't request page
위 출력값이 뜨는걸 보니 indeed 에서 웹 스크래핑을 막은거 같다.
5.12 Indeed 403 Fix
아래코드로 status code 와 html 코드를 가져왔다.
from requests import get
from bs4 import BeautifulSoup
from extractors.wwr import extract_wwr_jobs
base_url = 'https://kr.indeed.com/jobs?q='
search_term = 'python'
response = get(f'{base_url}{search_term}')
print(response.status_code)
print(response.text)
출력값:
403 에러와 함께 job 에 관한 정보가 아닌 anti-bot 페이지만 나온다.
( 이 페이지는 봇으로부터 보호하는데 사용하는 서비스인 클라우드 플레어가 만든 페이지이다. )
위와 같은 문제를 해결하기 Selenium 이라는걸 알아야한다.
Selenium → 브라우저를 자동화 할 수 있는 프로그램
내가 indeed.com 에 접근할 때 indeed 에서 봇으로 파악한 http request 를 보내고 있다.
그래서 indeed 에서 접근을 막는다.
만약 selenium을 사용하면 실제로 브라우저를 실행한다.
말그대로 실제로 구글 크롬 브라우저를 실행하고, 해당 페이지에 방문한다.
그래서 indeed.com 이 내가 봇이 안닌 브라우저라고 생각하게 만든다.
코드를 사용해서 브라우저를 자동화하고 제어할 수 있는 방법은
Selenium을 사용하는 것이다.
나의 목표는 inded.com/jobs 페이지의 소스코드를 얻는것이다.
cmd 창을 열고 pip install selenium ( pip3 install selenium ) 입력하여 설치
webdriver 는 python에서 브라우저를 시작할 수 있게 해준다.
webdriver 설치 시 자신의 크롬 버전과 맞는 드라이버 설치 추천.
아래 다른 사용자들의 tip 을 사용해서 설치를 진행했다.
셀레니움 설치
pip install selenium (혹은 pip3 install selenium)
드라이버 설치
크롬 : https://chromedriver.chromium.org/downloads
파이어폭스 : https://github.com/mozilla/geckodriver/releases
사파리 : https://webkit.org/blog/6900/webdriver-support-in-safari-10/
(mac은 brew가 더 편함 brew install chromedriver)
vs code에서 작업시,
01 - 터미널로 셀레니움 설치
pip install selenium
02 - 크롬 버전과 맞는 드라이버 다운
작업 중인 py파일과 chromedriver.exe파일을 같은 폴더에 넣어주기
(에러 발생 시, 터미널을 열고 터미널 경로와 같은 위치에 드라이버를 넣어주면 됨)
혹시나 창이 잠깐 떴다가 사라지면 맨 마지막에 아래 코드도 추가한다
( 크롬 버전과 맞지 않는 드라이버 설치시 발생 )
while(True):
pass
options 객체를 만들어 브라우저가 동작하게 몇가지 옵션을 전달해준다.
indeed.com 이 request들을 막고있기 때문에 request 부분의 코드를 모두 삭제했다.
webdriver를 selenium 에서 import 하고
selenium webdriver chrome options 에서 Options 를 import 한다.
browser 변수에 크롬 브라우저를 만들었고,
browser.get 메서드를 통해 indeed.com 에 접속한다.
from requests import get
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
browser = webdriver.Chrome(options=options)
browser.get('https://kr.indeed.com/jobs?q=python&vjk=e95f700e77a1d237')
while(True):
pass
실행시키면 새로운 크롬창에 indeed.com 에서 python 을 검색한 웹페이지가 나온다.
만약 코드를 다시 실행 시키고 싶다면 나는 vs code 와 새로 켜진 chrome 창을 계속 껏다 켯다 반복했지만,
간단하게 vs code 의 터미널 창을 삭제하고 다시 실행 하면 된다.
아래 코드로도 똑같이 접속이 가능하다.
from requests import get
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
browser = webdriver.Chrome(options=options)
browser.get('https://kr.indeed.com/jobs?q=python')
while(True):
pass
beautifulsoup에게 전달할 HTML 을 출력하기 위해
아래 코드 사용
from requests import get
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
browser = webdriver.Chrome(options=options)
browser.get('https://kr.indeed.com/jobs?q=python')
print(browser.page_source)
while(True):
pass
출력값: 중간부분
계속 터미널에 출력된 결과를 보면 아래와 같은 에러메시지가 뜬다. ( 정상적으로 출력되지만 에러메시지가 뜸 )
에러메시지 없애기 위해 아래 코드 추가
options.add_experimental_option('excludeSwitches', ['enable-logging'])
< 최종 코드 >
from requests import get
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
browser.get('https://kr.indeed.com/jobs?q=python')
print(browser.page_source)
while(True):
pass
출력값:
에러 메시지 없이 출력된다.
python 웹 스크래퍼 참고 강의
https://nomadcoders.co/python-for-beginners/lobby
selenium 참고 강의
'Programming > Python 웹 스크래퍼 만들기' 카테고리의 다른 글
Python None (0) | 2022.11.30 |
---|---|
Python selenium 활용해서 webscrapper 기초 제작 2 (0) | 2022.11.29 |
Python Refactor (0) | 2022.11.25 |
Python Beautifulsoup 복습 (0) | 2022.11.24 |
Python Beautifulsoup를 이용한 Saving Results (0) | 2022.11.23 |