Programming/Python 웹 스크래퍼 만들기

Python selenium 활용해서 webscrapper 기초 제작 1

2022. 11. 28. 21:00

5.11 Recursive

 

https://indeed.com/

indeed 역시 weworkremotely 사이트와 마찬가지로 구인구직 사이트 이다.

weworkremotely 에서 했듯이 동작방법을 알아본다.

검색창에 python 을 검색하고 어떤 방식으로 동작하는지 알아본다.

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 에러

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 ) 입력하여 설치

 

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 을 검색한 웹페이지가 나온다.

selenium으로 크롬 접속

만약 코드를 다시 실행 시키고 싶다면 나는 vs code 와 새로 켜진 chrome 창을 계속 껏다 켯다 반복했지만,

간단하게 vs code 의 터미널 창을 삭제하고 다시 실행 하면 된다.

python 터미널 삭제

 

아래 코드로도 똑같이 접속이 가능하다.

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

출력값: 중간부분

계속 터미널에 출력된 결과를 보면 아래와 같은 에러메시지가 뜬다. ( 정상적으로 출력되지만 에러메시지가 뜸 )

bluetooth 에러메시지

에러메시지 없애기 위해 아래 코드 추가

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 참고 강의

https://nomadcoders.co/selenium-for-beginners

'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
'Programming/Python 웹 스크래퍼 만들기' 카테고리의 다른 글
  • Python None
  • Python selenium 활용해서 webscrapper 기초 제작 2
  • Python Refactor
  • Python Beautifulsoup 복습
Security Engineer
Security Engineer
IT 공부
Security Engineer
IT-log
Security Engineer
전체
오늘
어제
  • 분류 전체보기 (171) N
    • Programming (39)
      • Python 웹 스크래퍼 만들기 (39)
    • IT 지식 (64) N
      • IT 정보 (27)
      • CS 기초 (24)
      • 운영체제 (8)
      • IT 인프라 기초 (5) N
    • 보안 (45)
      • 악성코드 분석 (10)
      • Bandit 워게임 (25)
      • 취미로 해킹 2 (6)
      • 환경 구축 (4)
    • 웹 해킹 (23)
      • 웹 기초 지식 (8)
      • SQL 기본 (2)
      • 웹 해킹 및 시큐어 코딩 기초 (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 취미로해킹
  • WarGame
  • 운영체제
  • IT 인프라
  • webScrapper
  • 컴퓨터
  • CSS
  • 웹 개발
  • Web
  • 워게임
  • 악성코드
  • CS
  • 모의해킹
  • Selenium
  • Python
  • 파이썬
  • 취미로 해킹
  • HTML
  • bandit
  • 웹
  • overthewire
  • 리눅스
  • CS 기초
  • 웹 해킹
  • 해킹
  • 악성코드 분석
  • Beautifulsoup
  • flask
  • Def
  • 시큐어 코딩

최근 댓글

최근 글

hELLO · Designed By 정상우.
Security Engineer
Python selenium 활용해서 webscrapper 기초 제작 1
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.