<복습>
https://wook-2124.tistory.com/31
<준비물>
https://github.com/psf/requests
https://www.crummy.com/software/BeautifulSoup/
<코드기록>
# 2번째 def인 extract_indeed_jobs(last_page)에 soup = BeautifulSoup(result.text, "html.parser")을 추가해주고 results를 만들어서 soup.find_all을 통해 jobsearch를 해줌!
import requests
from bs4 import BeautifulSoup
LIMIT = 50
URL = f"https://www.indeed.com/jobs?q=python&limit={LIMIT}"
def extract_indeed_pages():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
pagination = soup.find("div", {"class":"pagination"})
links = pagination.find_all('a')
pages = []
for link in links[:-1]:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_indeed_jobs(last_page):
jobs = []
for page in range(last_page):
result = requests.get(f"{URL}start={page * LIMIT}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"jobsearch-SerpJobCard"})
print(results)
return jobs
# <for 새로운 변수명(result) in 활요하고자 하는 변수명(results)> 을 활용해서 anchor 안에있는 title을 뽑아냄!
def extract_indeed_jobs(last_page):
jobs = []
# for page in range(last_page):
result = requests.get(f"{URL}start={0 * LIMIT}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"jobsearch-SerpJobCard"})
for result in results:
title = result.find("div", {"class":"title"}).find("a")["title"]
print(title)
return jobs
1. jobsearch 하기
먼저 main.py에서 indeed.py로 부터 extract_indeed_pages, extract_indeed_jobs를 호출하고
last_indeed_page = extract_indeed_pages()
indeed_jobs = extract_indeed_jobs(last_indeed_page)
위에 보이는 코드처럼 indeed_jobs 변수를 - extract_indeed_jobs 호출한 것에 last_indeed_page를 찾은 값이라고 설정해준다.
indeed 페이지에서 F12 혹은 Inspection(검사)를 통해 div class="jobsearch-SerpJobCard"를 찾아주자.
def extract_indeed_jobs(last_page):
jobs = []
for page in range(last_page):
result = requests.get(f"{URL}start={page * LIMIT}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class":"jobsearch-SerpJobCard"})
print(results)
return jobs
soup의 기능을 다시 사용하기 위해서 전에 했던 https://wook-2124.tistory.com/29?category=890509
soup = BeautifulSoup(result.text, "html.parser")를 새로 정의한 함수에도 다시 불러오고
results = soup.find_all("div", {"class":"jobsearch-SerpJobCard"}) 코드처럼
div class="jobsearch-SerpJobCard"로 찾은 정보를 입력하고 print(results)해주면 끝!!
하지만 모든 페이지를 가지고와서 아직은 복잡하다.. 그리고 returns jobs로 [] list로 묶어주자!
2. title 가져오기
이번에는 div class="title"을 가져와보자. a target 안에 title-"Jr Python developer" 라고 되있는 것을 가져오면 된다!
for result in results로 for 구문을 만들어서 results 결과에 나온 div class안에있는 title 다 가져왔다.
근데 title 자체가 str(문자열)이다보니까 너무 길어서 위에서 말한 title-"Jr Python developer" 이 부분만 따로 추출해야한다.
title.find("a").string을 해석하자면, div class="title"안에 있는 것중에 find(찾아라) a(anchor)를 string으로 바꿔서! 인데 여기서 anchor는 홈페이지 F12로 봤던 a target에 포함된 것들이라고 생각하면 된다.
그 수많은 것중에서 또 title만 뽑아내니 title-"Jr Python developer"에서 Jr Python developer만 남은 것이다.
하지만 문제가 있는데 그것은 None이라는 값이다. 아마 title쪽에 제목을 집어넣지 않아서 나온 값으로 생각이 된다.
3. title안의 anchor 변수 재정의(override)하기
anchor = title.find("a")["title"] 이것을 해석하자면, anchor는 title에서 찾은(find) a(anchor)중에서 title만 뽑아낸 값이야! 라고 할 수 있겠다.
그리고 그것을 print(anchor)해주면 터미널에 보이는 것처럼 깔끔하게 나오는 것을 알 수 있다.
그럼 마지막으로 굳이 따로 anchor 변수를 만들 필요없이 title변수에 합쳐주면 된다.
title = result.find("div", {"class":"title"}).find("a")["title"]
result라는 새로운 변수명(for)에 찾아라(find) div class="title"을, 그리고 추가로 a(anchor)안에 있는 "title"도 찾아라.
그럼 다음시간에 이어서 정리!! :)
※ 코로나바이러스감염증-19 조심하세요!!!!
'Python > Web Scraping' 카테고리의 다른 글
[Python] #2.8 Extracting Locations and Finishing up (#코딩공부) (0) | 2020.02.21 |
---|---|
[Python] #2.7 Extracting Companies (#코딩공부) (0) | 2020.02.20 |
[Python] #2.5 Requesting Each Page (#코딩공부) (0) | 2020.02.17 |
[Python] #2.4 Extracting Indeed Pages part Two (#코딩공부) (0) | 2020.02.16 |
[Python] #2.3 Extracting Indeed Pages (#코딩공부) (0) | 2020.02.14 |
댓글