# -*- coding: utf-8 -*-
#pip install selenium
#pip install beautufulsoup4
from bs4 import BeautifulSoup
from selenium import webdriver
import requests
import time
import pandas as pd
통찰력
1. 페이지 이동시 url 패턴 이해
2. 반복문을 쓴다
3. 모듈화
1-1. 기본 url
1-2. 버튼을 클릭하면 URL
1-3. page 요청만 했을 때
1-4. 불필요한 코드 삭제
2. 원래 코드
더 보기
#서칭된 url이 상대경로 이기때문에 앞부분 url을 따로 저장
pre_url="https://www.jobkorea.co.kr/"
#드라이버 실행
driver = webdriver.Chrome('/chromedriver/chromedriver.exe')
#url 접근
search_url="https://www.jobkorea.co.kr/starter/PassAssay?Page=1"
driver.get(search_url)
#드라이버 현재 URL 로드 해서 response 객체에 저장
response = requests.get(driver.current_url)
# 뷰티풀소프를 이용해서 html 파싱
soup = BeautifulSoup(response.text, 'html.parser')
#url 리스트 객체 생성
names = ()
fields = ()
urls = ()
# 웹 스크래핑한 결과에서 필요한 정보를 추출하여 각 리스트에 저장
for name in soup.select('.titTx'):
names.append(name.text.strip())
for field in soup.select('.field'):
if field.text.strip() not in ('인턴', '신입'):
fields.append(field.text.strip())
for url in soup.find_all('p', {'class': 'tit'}):
urls.append(pre_url + url.find('a')('href'))
# 판다스 데이터프레임으로 저장
data = {'name': names, 'field': fields, 'url': urls}
df = pd.DataFrame(data)
df.head()
driver.quit()
2-1. 재배치 후 for 변수 추가
#서칭된 url이 상대경로 이기때문에 앞부분 url을 따로 저장
pre_url="https://www.jobkorea.co.kr/"
#드라이버 실행
driver = webdriver.Chrome('/chromedriver/chromedriver.exe')
#url 리스트 객체 초기화
names = ()
fields = ()
urls = ()
for i in range(1,5):
pagenum = i
print(i)
#url 접근
search_url = f'https://www.jobkorea.co.kr/starter/PassAssay?Page={pagenum}'
driver.get(search_url)
# web loading 대기
time.sleep(1)
# 드라이버 현재 URL 로드 해서 response 객체에 저장
response = requests.get(driver.current_url)
# 뷰티풀소프를 이용해서 html 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# 웹 스크래핑한 결과에서 필요한 정보를 추출하여 각 리스트에 append
for name in soup.select('.titTx'):
names.append(name.text.strip())
for field in soup.select('.field'):
if field.text.strip() not in ('인턴', '신입'):
fields.append(field.text.strip())
for url in soup.find_all('p', {'class': 'tit'}):
urls.append(pre_url + url.find('a')('href'))
# 판다스 데이터프레임으로 저장
data = {'name': names, 'field': fields, 'url': urls}
df = pd.DataFrame(data)
– 결과 확인
– url 저장 이상 발견.
pre_url / 삭제
3. 모듈화
def in_data_url(start_page, end_page):
#서칭된 url이 상대경로 이기때문에 앞부분 url을 따로 저장
pre_url="https://www.jobkorea.co.kr"
#드라이버 실행
driver = webdriver.Chrome('/chromedriver/chromedriver.exe')
#url 리스트 객체 초기화
names = ()
fields = ()
urls = ()
for i in range(start_page,end_page+1):
pagenum = i
print(i)
#url 접근
search_url = f'https://www.jobkorea.co.kr/starter/PassAssay?Page={pagenum}'
driver.get(search_url)
# web loading 대기
time.sleep(1)
# 드라이버 현재 URL 로드 해서 response 객체에 저장
response = requests.get(driver.current_url)
# 뷰티풀소프를 이용해서 html 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# 웹 스크래핑한 결과에서 필요한 정보를 추출하여 각 리스트에 append
for name in soup.select('.titTx'):
names.append(name.text.strip())
for field in soup.select('.field'):
if field.text.strip() not in ('인턴', '신입'):
fields.append(field.text.strip())
for url in soup.find_all('p', {'class': 'tit'}):
urls.append(pre_url + url.find('a')('href'))
# 판다스 데이터프레임으로 저장
data = {'name': names, 'field': fields, 'url': urls}
df = pd.DataFrame(data)
driver.quit()
return df
df_url = in_data_url(5,10)
df_url.info()
df_url.tail()
테스트
확인