[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 Company 추출하기

미음제

·

2021. 2. 14. 23:09

파이썬으로 웹 스크래퍼 만들기

 

Part 1 이론

Part 2 파이썬으로 웹 스크래퍼 만들기

Part 3 Django를 사용하기 위해 알면 좋은 것

 

파이썬으로 웹 스크래퍼 만들기는 위와 같은

3개의 Part로 나누어 진행한다.

 

이 전 글 보기

2021/02/14 - [Developer/Python] - [파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 Title 추출하기


Part 2 파이썬으로 웹 스크래퍼 만들기

Extract Company name

 

이 전까지

일자리에 대한

title을 추출했고

 

그 일자리를 제공하는

회사의 이름을 추출한다.

 

추출할 회사의 이름을

추출하기 위해

페이지 검사를 해본다.

 

검사를 해보면

class 명이

"sjcl"이라는

div 안에

 

회사의 이름이 

class 명이

"company"인

span에 적혀있다.

 

앞서 title을 추출하는 방식과

똑같이 회사 이름을 추출한다.

 

indeed.py

extract_indeed_jobs()함수

  results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})
    for result in results:
        title = result.find("h2", {"class": "title"}).find("a")["title"]
        company = result.find("div", {"class": "sjcl"}).find("span").string
        print(company)
    return jobs

"sjcl"이라는 class명의

div를 찾고

그 안에서 "span"을 찾아

text만 추출하여

출력한다.

 

 

회사의 이름을 출력하고 나서

페이지로 돌아가 확인해 보면

회사 이름에

링크가 걸려있는 경우가 있고

안 걸려 있는 경우가 있다.

회사 이름에 링크가 있는 경우 anchor 요소가 모두 출력된다.

anchor를 모두 출력 안 하고

회사 이름만 출력하기 위해

코드를 수정한다.

 

indeed.py

extract_indeed_jobs()함수

def extract_indeed_jobs(last_page):
    jobs = []
    # for page in range(last_page):
    # 회사 이름에 링크가 있는 경우가 2페이지라서 1페이지 주석
    #result = requests.get(f"{URL}&start={0*LIMIT}")
    result = requests.get(f"{URL}&start={1*LIMIT}")
    soup = BeautifulSoup(result.text, 'html.parser')
    results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})
    for result in results:
        title = result.find("h2", {"class": "title"}).find("a")["title"]
        company = result.find("div", {"class": "sjcl"}).find("span")
        if company.find("a") is not None:
            print(company.find("a").string)
        else:
            print(company.string)
        # print(company)
    return jobs

회사 이름만 출력하도록 수정 한 후 결과

올바른 결과가 출력되었고

코드를 간략하게 수정하면

    for result in results:
        title = result.find("h2", {"class": "title"}).find("a")["title"]
        company = result.find("div", {"class": "sjcl"}).find("span")
        company_anchor = company.find("a")
        if company_anchor is not None:
            print(company_anchor.string)
        else:
            print(company.string)
        # print(company)

company_anchor변수에

company.find("a")를 통해

anchor를 찾아 저장하고

if-else문을 통해 걸러낸다.

 

링크가 없으면

company의 string을 출력하고

링크가 있으면

company_anchor의 string을 출력한다.

 

그리고 위 결과를

company 변수에

새로운 값으로 넣어준다.

    for result in results:
        title = result.find("h2", {"class": "title"}).find("a")["title"]
        company = result.find("div", {"class": "sjcl"}).find("span")
        company_anchor = company.find("a")
        if company_anchor is not None:
            company = company_anchor.string
        else:
            company = company.string
        # print(company)

여기까지

회사의 이름을 추출하는

과정이다.

 

앞서 타이틀을 추출했고,

회사의 이름까지 추출했으니

두 결과를 합쳐서 출력한다.

    for result in results:
        title = result.find("h2", {"class": "title"}).find("a")["title"]
        company = result.find("div", {"class": "sjcl"}).find("span")
        company_anchor = company.find("a")
        if company_anchor is not None:
            company = company_anchor.string
        else:
            company = company.string
        print(title, company)
    return jobs

 

title, 회사 이름 출력
2페이지의 검색 결과 일부

[SI]중급/JAVA/8개월/경기도이천

원스링크

IoT 제어 펌웨어 sw 개발 (6년 이상)

국내 중견전자회사

디지털 데이타 마케팅기획

Success Korea

출력된 것을 확인할 수 있다.

 

 

반응형