import requests
# 좌측 메뉴에서 packge에 들어가서 request를 설치한다. : pip install requests
from bs4 import BeautifulSoup #beautiful Soup <- S 대문자여야 하낟
# Beautifulsoup4 로 다운로드 한다. html scrapper package : pip install bs4 , from bs4 import BeautifulSoup
LIMIT = 50
URL = f"https://www.indeed.com/jobs?q=python&limit={LIMIT}"
################################
def extract_indeed_pages():
url_result = requests.get(URL)
# print(indeed_result) # 출력 : <Response[200]>
# print(indeed_result.text) # 출력 모든게 다나옴
soup = BeautifulSoup(url_result.text,"html.parser")
#class
pagination = soup.find("div", {"class":"pagination"})
links = pagination.find_all('a') #links는 list로 만들어진다.
pages = [] #span list를 담을 그릇
for link in links[:-1] : #[:-1] 뒤에 마지막 것 제외하고 출력하기
pages.append(int(link.find("span").string)) #.string을 이용해서 text만 가져옴, 가져온 text를 int로 바꿔줌
# 가장 마지막 숫자를 찾는다.
max_page = pages[-1]
return max_page
# TITLE 가져오고 각각 REQUEST 보냄
def extract_indeed_jobs(last_page):
jobs = []
for page in range (last_page):
print(f"스크랩해온 페이지는 {page}/{last_page}입니다")
result = requests.get(f"{URL}&start={page*LIMIT}") #변수끼리 계산할 것이 있으면 계산할 것 하고 {}로 닫아준다
print(result.status_code) #반응하는지 확인, 200이 20개 나와줘야함.
soup = BeautifulSoup(result.text,"html.parser")
# 제목 division을 찾아온다
results = soup.find_all("div", {"class":"jobsearch-SerpJobCard"})
# 각 페이지에서 List 로 생성된 results를 for 구문으로 돌린다.
for result in results :
#title을 추출함
title = result.find("div", {"class":"title"}).find("a")["title"] #list에서 title value 에 배정된 값을 가져와
#Company 이름을 추출함
company = result.find("span",{"class":"company"})
company_anchor = company.find("a")
if company_anchor is not None: #anchor가 있으면 anchor 내용을 가져온다.
company = company_anchor.string
else:
company = company.string # 여백이 너무 많아서 .strip()을 이용하여 지워줌
company = company.strip()
#Location 추가 함
location = result.find("div",{"class":"recJobLoc"})["data-rc-loc"] #data-rc-loc에 배정된 내용을 가져온다.
#job_id 추가함 : 다른 페이지 링크로 연결됨
job_id = result["data-jk"]
# 전체 다 가지는 배열 만듦
job = {
'title':title,
'company':company,
'location':location,
'link': f"https://www.indeed.com/viewjob?jk={job_id}"
} #job list에 하나씩 쌓아줌.
jobs.append(job)
return jobs
###################################
max_indeed_page = extract_indeed_pages()
indeed_jobs = extract_indeed_jobs(max_indeed_page)
###################
import csv
def save_to_file(lists):
file = open("jobs.csv", mode = "w") #open :파일이 없으면 만들어줌
print(file)
writer = csv.writer(file)
writer.writerow(["title", "company","location","link"])
for list in lists:
writer.writerow([list["title"], list["company"],list["location"],list["link"]])
# ☆더 편하게 하는 방법은 list.values()☆☆ 로 하면, dictionary의 value값만 가져올 수 있다.
# .values를 쓰면 dict_value가 붙으므로 list()로 감싸줘야한다.
save_to_file(indeed_jobs)
'세상 바라보는 시선 👁 > Growth Hacking' 카테고리의 다른 글
[Pretotype] 아이디어 불패의 법칙 (0) | 2020.09.03 |
---|---|
[데이터 사이언스] 딥러닝 - one hot encoding 을 하려면... @dsschool (0) | 2020.04.20 |
[Pandas] 시각화 - 한글화 시키기 (0) | 2020.04.09 |
[Python] Flask를 이용하여 서비스 운영 (0) | 2020.04.08 |
[Python] cheating sheet - 노마드코더 (0) | 2020.04.07 |
[DS School] Level6 에서 기록으로 남겨 놓을 것 (Decision tree, Random Forest, DecisionTreeClassifier, DecisionTreeRegressor) (0) | 2020.04.01 |
[Pandas] Visualization 관련 정리 (시각화) (0) | 2020.03.25 |
♡를 눌러주시면 블로그를 작성하는데 큰 힘이 됩니다♪
로그인이 필요없어요.
로그인이 필요없어요.