티스토리 뷰
728x90
안녕하세요. 이번 시간에는 python beautifulsoup을 이용하여 알바천국 채용정보 크롤러를 만들어 보고자 합니다.
최근들어, python beautifulsoup을 이용하여 웹 페이지 스크래핑에 대한 관심이 많아져서 오늘 알아보는 자료를 포스팅하게 되었습니다.
늘 말씀드리지만, 저보다 훌륭한 글들로 이미 포스팅해주신 다른 분들이 많기 때문에 이번 파이썬 beautifulsoup 크롤러 만들기 (알바몬 스크래핑) 포스팅에서 부족한 부분은 다른 블로거 분들을 통해서 충분히 얻으실 수 있습니다.
그럼 python 초보자 분들도 충분히 하실 수 있을 파이썬 beautifulsoup 크롤러 만들기 (알바천국 스크래핑) 시작합니다.
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
알바몬 채용공고 정보 가져오기¶
In [2]:
import requests
from bs4 import BeautifulSoup
alba_url = "http://www.alba.co.kr"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(alba_url,headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
1. 회사명 수집¶
- 기초적인 웹 구조를 아셔야하는데, 본 포스팅에서는 아주 얕게만 다루겠습니다.
- 알바천국의 "슈퍼브랜드 채용정보"란을 수집한다는 가정에
아래의 그림에서 보시는 것처럼 해당하는 html 테그의 정보가 필요합니다. (MainSuperBrand)
웹사이트가 업데이트될시 html 테그 정보가 바뀔수 있으니 그때그때 맞춰서 수정해야합니다.
In [3]:
main_super_data = soup.find_all("div", {"id":"MainSuperBrand"})
여기서 중요! find_all¶
- BeautifulSoup의 find_all은 내가 지정하는 테그 정보에 해당하는 모든 정보를 가져옵니다.
- 그래서 결과값이 담길때 list 안에 담깁니다.
- 정보 가져올 대상이 복수/단수인지에 따라 find를 사용할지, find_all을 사용할지 달라집니다.
In [4]:
res = main_super_data[0].find_all("a", {"class": "goodsBox-info"})
수집할 기업명과 url 주소 수집하기¶
- find("span", {"class":"company"} : 기업명에 해당하는 텍스트 데이터를 가져옵니다.
- x['href'] : 기업 url에 해당하는 데이터를 가져옵니다.
In [5]:
company_list = []
company_url_list = []
for x in res:
company_list.append(x.find("span", {"class":"company"}).string)
company_url_list.append(x["href"])
In [6]:
company_url_list[0:2], company_list[0:2]
Out[6]:
(['http://thinknet.alba.co.kr/', 'http://baskinrobbins.alba.co.kr/'], ['(주)생각대로', '배스킨라빈스 & 던킨'])
2. 회사내용 수집¶
- 앞서 수집한 url 리스트마다 들어가서 원하는 정보를 수집합니다.
- 함수를 만들어 사용합시다!
In [7]:
import pandas as pd
def scrap_data(url, company):
print("####### {} 정보수집 중 #######".format(company))
data = requests.get(url,headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
r = soup.find_all("div", {"id":"NormalInfo"})
local_list = []
title_list = []
workTime_list = []
pay_list = []
rgstTime_list = []
for idx, i in enumerate(r):
local = i.find_all("td", {"class": "local"})
title = i.find_all("td", {"class": "title"})
work_time = i.find_all("td", {"class": "data"})
pay_type = i.find_all("td", {"class": "pay"})
rgst_time = i.find_all("td", {"class": "regDate"})
## 지역
for l in local:
local_data = l.text.replace("\xa0", " ")
local_list.append(local_data)
## 제목
for t in title:
detail_title = t.find("span", {"class":"company"}).text.lstrip()
title_list.append(detail_title)
## 근무시간
for w in work_time:
detail_worktime = w.text
workTime_list.append(detail_worktime)
## 급여형태
for p in pay_type:
pay_list.append(p.text)
## 등록시간
for r in rgst_time:
detail_rgstTime = r.text
rgstTime_list.append(detail_rgstTime)
result = pd.DataFrame({'place' : local_list, 'title': title_list, "time": workTime_list, "pay": pay_list,\
"date": rgstTime_list})
print("####### {} 정보수집 완료 #######".format(company))
return result
In [8]:
for url, company in zip(company_url_list[1:2], company_list[1:2]):
print(url, company)
result = scrap_data(url, company)
http://baskinrobbins.alba.co.kr/ 배스킨라빈스 & 던킨 ####### 배스킨라빈스 & 던킨 정보수집 중 ####### ####### 배스킨라빈스 & 던킨 정보수집 완료 #######
In [9]:
result
Out[9]:
place | title | time | pay | date | |
---|---|---|---|---|---|
0 | 서울 성동구 | 비알코리아 | 18:00~23:00 | 시급9,160 | 4분전 |
1 | 서울 송파구 | 배스킨라빈스 위례트레이더스 | 16:00~22:30 | 시급9,500 | 5분전 |
2 | 인천 남동구 | 배스킨라빈스 구월CGV점 | 18:00~22:00 | 시급9,160 | 6분전 |
3 | 서울 송파구 | 배스킨라빈스 위례트레이더스 | 16:00~22:30 | 시급9,500 | 7분전 |
4 | 서울 양천구 | 배스킨라빈스31 등촌역점 | 00:00~24:00 | 시급9,160 | 7분전 |
5 | 서울 양천구 | 배스킨라빈스31 등촌역점 | 00:00~24:00 | 시급9,160 | 7분전 |
6 | 경기 하남시 | 배스킨라빈스 위례트레이더스 | 16:00~22:30 | 시급9,500 | 7분전 |
7 | 서울 양천구 | 배스킨라빈스31 등촌역점 | 00:00~24:00 | 시급9,160 | 8분전 |
8 | 서울 전체 | 배스킨라빈스 숭실대점 | 16:00~23:30 | 시급9,160 | 8분전 |
9 | 서울 서초구 | 배스킨라빈스 고속터미널역점 | 13:00~22:00 | 시급9,160 | 8분전 |
10 | 인천 연수구 | 배스킨라빈스 인천송도점 | 시간협의 | 시급9,300 | 9분전 |
11 | 서울 전체 | 배스킨라빈스 숭실대점 | 09:30~16:00 | 월급1,550,000 | 11분전 |
12 | 충북 진천군 | 배스킨라빈스 충북덕산점 | 시간협의 | 시급9,160 | 20분전 |
13 | 경기 안산시 | 베스킨라빈스 안산원곡점 | 시간협의 | 시급9,160 | 20분전 |
14 | 서울 구로구 | 배스킨라빈스 개봉역사점 | 18:00~23:00 | 시급9,500 | 22분전 |
15 | 서울 광진구 | 베스킨라빈스군자점 | 18:00~23:00 | 시급9,160 | 26분전 |
16 | 대전 전체 | 배스킨라빈스대전산성점 | 10:00~15:00 | 시급9,160 | 29분전 |
17 | 대전 서구 | 배스킨라빈스대전가수원점 | 10:00~15:00 | 시급9,160 | 30분전 |
18 | 서울 중랑구 | 베스킨라빈스이마트 | 시간협의 | 시급9,160 | 32분전 |
19 | 서울 서대문 | 배스킨라빈스 독립문점 | 18:00~23:00 | 시급9,160 | 34분전 |
20 | 경기 김포시 | 베스킨라빈스김포고촌점 | 20:00~23:00 | 시급9,160 | 34분전 |
21 | 대전 유성구 | 배스킨라빈스 대전지족점 | 18:30~23:00 | 시급9,160 | 37분전 |
22 | 서울 전체 | 배스킨라빈스 숭실대점 | 16:00~23:30 | 시급9,160 | 44분전 |
23 | 서울 구로구 | 배스킨라빈스신도림점 | 시간협의 | 시급9,160 | 45분전 |
24 | 부산 수영구 | 배스킨라빈스 | 시간협의 | 시급9,200 | 47분전 |
25 | 서울 구로구 | 배스킨라빈스 개봉역사점 | 16:00~21:00 | 시급9,160 | 54분전 |
26 | 경북 경산시 | 배스킨라빈스 경산신대점 | 시간협의 | 시급9,200 | 58분전 |
27 | 경북 김천시 | 베스킨라빈스김천신음점 | 18:00~10:30 | 시급9,160 | 58분전 |
28 | 서울 마포구 | 배스킨라빈스 홍대상상마당점 | 10:30~14:00 | 시급9,160 | 1시간전 |
29 | 경기 화성시 | 배스킨라빈스31 화성시청점 | 12:00~14:30 | 시급9,160 | 1시간전 |
30 | 경기 화성시 | 배스킨라빈스31 화성시청점 | 12:00~18:00 | 시급9,160 | 1시간전 |
31 | 경기 화성시 | 배스킨라빈스31 화성시청점 | 19:00~23:00 | 시급9,160 | 1시간전 |
32 | 전북 군산시 | 베스킨라빈스군산수송점 | 19:00~22:30 | 시급9,160 | 1시간전 |
33 | 인천 남동구 | 배스킨라빈스 구월CGV점 | 18:00~22:00 | 시급9,160 | 1시간전 |
34 | 경기 구리시 | 배스킨라빈스 구리갈매점 | 18:00~23:00 | 시급9,200 | 1시간전 |
35 | 경기 구리시 | 배스킨라빈스 구리갈매점 | 18:00~23:00 | 시급9,200 | 1시간전 |
36 | 경북 포항시 | 배스킨라빈스 | 15:00~19:00 | 시급9,160 | 1시간전 |
37 | 경기 성남시 | 배스킨라빈스 분당시범점 | 시간협의 | 시급9,500 | 1시간전 |
38 | 대구 달성군 | 배스킨라빈스 | 13:00~18:00 | 시급9,160 | 2시간전 |
39 | 인천 남동구 | 배스킨라빈스 구월CGV점 | 18:00~22:00 | 시급9,160 | 2시간전 |
40 | 서울 송파구 | 배스킨라빈스 | 18:00~23:00 | 시급9,200 | 2시간전 |
41 | 서울 관악구 | 배스킨라빈스 봉천역점 | 시간협의 | 시급9,200 | 2시간전 |
42 | 서울 서초구 | 배스킨라빈스 방배역점 | 18:30~23:00 | 시급9,200 | 2시간전 |
43 | 경기 성남시 | 배스킨라빈스 성남도촌점 | 18:00~23:00 | 시급9,160 | 2시간전 |
44 | 경기 시흥시 | 배스킨라빈스시화세종점 | 14:00~18:00 | 시급9,200 | 2시간전 |
45 | 서울 영등포 | 배스킨라빈스신풍역 | 시간협의 | 시급9,200 | 2시간전 |
46 | 대전 유성구 | 베스킨라빈스대전노은 | 시간협의 | 시급9,160 | 2시간전 |
47 | 서울 영등포 | 배스킨라빈스당산역점 | 10:00~13:00 | 시급9,200 | 2시간전 |
48 | 경기 수원시 | 배스킨라빈스 인계로데오점 | 시간협의 | 시급9,160 | 2시간전 |
49 | 경기 수원시 | 배스킨라빈스 인계로데오점 | 시간협의 | 시급9,160 | 2시간전 |
In [ ]:
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 판매량예측
- 위워크후기
- 브랜딩기획
- mac mongodb 설치
- early_stopping_rounds
- python 스크래핑 기초
- 데이터분석
- Python
- ChatModel
- 위워크서울스퀘어
- 알바천국 크롤러
- 위워크서울역
- GPT4
- 보스턴주택가격
- 맥북 몽고DB 실행
- python crawler
- 보스턴집가격
- python 크롤러 기초
- 알바천국 스크래핑
- Mac MongoDB install
- gpt3.5
- 맥OS 몽고DB 설치
- wowork
- 형태소분석
- lightgbm early stopping
- 파이썬
- 파이썬 리스트 연산
- 맥북 몽고DB 설치
- load_boston
- 파이썬 스크래핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함