[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 페이지 요청
미음제
·2021. 2. 9. 22:27
파이썬으로 웹 스크래퍼 만들기
Part 1 이론
Part 2 파이썬으로 웹 스크래퍼 만들기
Part 3 Django를 사용하기 위해 알면 좋은 것
파이썬으로 웹 스크래퍼 만들기는 위와 같은
3개의 Part로 나누어 진행한다.
이 전 글 보기
2021/02/09 - [Developer/Python] - [파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 정보 추출 Extracting 2
Part 2 파이썬으로 웹 스크래퍼 만들기
Request 보내기
range() 함수를 이용
range() 함수는
argument로 넣은 수만큼의
크기의 배열을 생성한다
ex)
x = 3
for n in range(x):
print(x)
0. 1. 2가 출력된다.
range 함수를 이용해
Request를 하기 위해선?
ragne의 현재 값을
추출하고자 하는
URL에서 가져온
요소의 개수만큼 곱해준다.
*필자의 경우
Indeed에서 파이썬 직업에 대한
일자리를 추출하려 하는데
URL을 살펴보면
1 페이지는
kr.indeed.com/%EC%B7%A8%EC%97%85?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC&limit=50
이런 식으로 되어 있다.
2페이지는
kr.indeed.com/%EC%B7%A8%EC%97%85?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC&limit=50&start=50
이렇게 되어있다.
즉, 50개씩 검색 조건을 걸었으므로
limit=50의 형태로 URL에 있고
1 페이지에 50개의 요소가
나열된다.
1페이지는 start=0
2페이지는 start=1*50
3페이지는 start=2*50
...
links = pagination.find_all('a')
pages = []
for link in links[:-1]: # '다음'버튼은 무시
pages.append(int(link.string))
max_page = pages[-1]
# 페이지 숫자 중 가장 큰 수, 배열의 마지막 요소
for n in range(max_page):
print(f"start={n*50}")
pages라는 배열에
a에서 추출한 번호를 집어넣고
페이지를 요청하기 위해
range의 현재 값을
Indeed에서 가져온 요소만큼 곱해주는
for문을 생성한다.
Indeed에서
파이썬에 대한 일자리의
검색 결과는 총 2페이지.
for문을 돌려보면
start=0
start=50
이 출력된다.
페이지를 요청하기 위한
기본적인 준비를 마치고
여기까지의 내용을
function(함수)로 정의한다.
main.py
import requests
from bs4 import BeautifulSoup
indeed_result = requests.get(
'https://kr.indeed.com/%EC%B7%A8%EC%97%85?as_and=%ED%8C%8C%EC%9D%B4%EC%8D%AC&as_phr=&as_any=&as_not=&as_ttl=&as_cmp=&jt=all&st=&salary=&radius=25&l=&fromage=any&limit=50&sort=&psf=advsrch&from=advancedsearch')
indeed_soup = BeautifulSoup(indeed_result.text, 'html.parser')
pagination = indeed_soup.find("div", {"class": "pagination"})
# pagination 변수에 찾은 결과를 넣어줌
# 그 결과를 list로 만들어 pages 변수에 넣어줌
# pages를 가져온 다음
# 빈 array를 만들고
# pages에 있는 각 page마다 span을 찾아서
# 빈 array에 넣어준다.
links = pagination.find_all('a')
pages = []
for link in links[:-1]: # '다음'버튼은 무시
pages.append(int(link.string))
max_page = pages[-1]
# 페이지 숫자 중 가장 큰 수, 배열의 마지막 요소
for n in range(max_page):
print(f"start={n*50}")
의 내용을
indeed.py를 새로 생성해
새로운 함수로 정의한다.
indeed.py
import requests
from bs4 import BeautifulSoup
URL = "https://kr.indeed.com/jobs?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC&limit=50&radius=25"
def extract_indeed_pages():
result = requests.get(URL)
soup = BeautifulSoup(result.text, 'html.parser')
pagination = soup.find("div", {"class": "pagination"})
# pagination 변수에 찾은 결과를 넣어줌
# 그 결과를 list로 만들어 pages 변수에 넣어줌
# pages를 가져온 다음
# 빈 array를 만들고
# pages에 있는 각 page마다 span을 찾아서
# 빈 array에 넣어준다.
links = pagination.find_all('a')
pages = []
for link in links[:-1]: # '다음'버튼은 무시
pages.append(int(link.string))
max_page = pages[-1]
# 페이지 숫자 중 가장 큰 수, 배열의 마지막 요소
return max_page
그리고 main.py도 다음과 같이
수정해준다.
from indeed import extract_indeed_pages
max_indeed_pages = extract_indeed_pages()
print(max_indeed_pages)
새로 만든
extract_indeed_pages 함수를
import 해주고
max_indeed_pages라는 변수를 통해
호출해준다.
extract_indeed_pages() 함수를 만들어
함수를 재사용할 수 있게 한 것.
그리고
indeed.py에
새로운 함수를 추가해 주고
(일자리를 추출하기 위한 함수)
페이지 요청에 쓰일
LIMIT 변수 생성과
URL 변수를 수정해준다.
#추가
LIMIT = 50
#수정
URL = f"https://kr.indeed.com/jobs?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC&limit={LIMIT}"
def extract_indeed_pages():
#수정
result = requests.get(URL)
#함수 추가
def extract_indeed_jobs(last_page):
for page in range(last_page):
print(f"&start={page*LIMIT}")
마찬가지로
main.py도 수정해준다.
indeed.py에서 새롭게
생성한 함수를 import와 호출
#새로 만든 함수 import
from indeed import extract_indeed_pages, extract_indeed_jobs
#max_indeed_pages변수명 수정
last_indeed_page = extract_indeed_pages()
#새로 만든 함수 호출
extract_indeed_jobs(last_indeed_page)
extract_indeed_jobs()의 인자에
last_indeed_page를 주어
요청을 만들기 위한 작업을 완성한다.
extract_indeed_jobs() 인자로
last_indeed_page를 주어
호출하게 되면
다음과 같은 결과가 나온다.
Page 요청하기
페이지를 요청하기 위해
requests.get(URL)을 사용한다.
#수정
URL = f"https://kr.indeed.com/%EC%B7%A8%EC%97%85?q=%ED%8C%8C%EC%9D%B4%EC%8D%AC&limit={LIMIT}"
#extract_ineed_jobs 함수의 for문 수정
def extract_indeed_jobs(last_page):
for page in range(last_page):
result = requests.get(f"{URL}&start={page*LIMIT}")
print(result.status_code)
정보를 추출해올 URL을
URL이라는 변수에 담았고,
LIMIT를 전역 변수로
검색 조건에서 입력한
50개를 LIMIT로 저장했다.
requests.get함수를 통해
페이지를 요청하는데
URL(인자)에
f"{URL}&start={page*LIMIT}" 를
입력해 준다.
그리고 우리의 코드가
잘 작동하는지 확인해 보기 위해
status_code() 함수를 사용한다.
status_cod() 함수는
올바른 코드라면
200을 출력한다.
추출하고자 하는 URL은
총 2페이지 이므로
2번의 200이 출력되어야 한다.
다음 포스트 내용?
각 페이지에서
일자리 정보를 추출해
어딘가에 담고
모든 일자리를 return 할 것
다음 내용을 위해
main.py 함수를 약간 수정
#변수 선언
indeed_jobs = extract_indeed_jobs(last_indeed_page)
indeed.py 약간 수정
def extract_indeed_jobs(last_page):
#추가
jobs = []
for page in range(last_page):
result = requests.get(f"{URL}&start={page*LIMIT}")
print(result.status_code)
#추가
return jobs
jobs라는 빈 배열을 생성해
일자리를 추출하고
return해 주기 위한 작업
'Developer > Python - 웹 스크래핑' 카테고리의 다른 글
[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 Company 추출하기 (0) | 2021.02.14 |
---|---|
[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 Title 추출하기 (0) | 2021.02.14 |
[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 정보 추출 Extracting 2 (0) | 2021.02.09 |
[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 정보 추출 Extracting (0) | 2021.02.04 |
[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 requests 모듈 설치 / Beautiful Soup 모듈 설치 (0) | 2021.02.04 |