ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 독학 10일차 BeautifulSoup(웹 파싱하기, 스크래핑) 4
    coding 2022. 9. 10. 00:00
    728x90
    반응형
    SMALL

    9일 차 포스팅에서 구인을 하고 있는 기업의 이름과, 근무 시간 등을 스크랩했지만

    결과에 html 태그가 끼여 있어 가독성이 무척 떨어졌다.

    그래서 이번 포스팅엔 beautifulsoup의. string이라는 기능을 이용하여 item들만 간추려보겠다.

     

    뷰티풀 수프의 문서를 살펴보면. string을 사용하면

    스크래핑한 html 태그 안에 child가 스트링이라면 스트링을 가져올 수 있다고 되어있다.

     

    아래와 같이 작성하면 태그는 제거하고 아이템만 가져올 수 있게 된다.

    print(company_name.string,"\n", shift.string,"\n", region.string,"\n", title.string)

    코드실행결과

    따란 정말 멋지고 가슴이 웅장해진다.

    샤라웃 투 니코쌤 노마드코드 최고

    더보기
    #웹을 가져오기 위해 requests의 get을 임포트
    from requests import get
    #beautifulsoup 사용을 위해 임포트
    from bs4 import BeautifulSoup
    
    base_url = "https://weworkremotely.com/remote-jobs/search?utf8=%E2%9C%93&term="
    search_term = "python"
    
    #나중에 url과 검색어를 변경하여 재사용할 수 있게 f문자열 포매팅
    response = get(f"{base_url}+{search_term}")
    #웹사이트에서 정상적인 응답(200)을 주지 않을때를 대비
    if not response.status_code == 200:
      print("Can't request website")
    #정상이라면 페이지의 html 코드를 쫙 긁어 옴
    else:
      #print(response.text)
      soup = BeautifulSoup(response.text, 'html.parser')
      #section의 jobs클래스 리스트를 만들어주자
      jobs = soup.find_all('section', class_="jobs")
      for job_section in jobs:
        job_posts = job_section.find_all('li')
        #viewlall제거
        job_posts.pop(-1)
        for post in job_posts:
            anchors = post.find_all('a')
            anchor = anchors[1]
          #list의 길이(len)을 알고 있다면 item들의 순서에 맞춰 변수명을 넣어줄 수 있음
            company_name, shift, region = anchor.find_all('span', class_="company")
          
           
            link = anchor['href']
            #find_all은 항상 list를 주기 때문에 title하나만 원해서 .find
            title = anchor.find('span', class_="title")  
            print(company_name.string,"\n", shift.string,"\n", region.string,"\n", title.string)
            print("🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸🔸")

    다음 포스팅엔 추출한 데이터들을 dic에 저장하여 관리해보겠다.

    728x90
    반응형
    LIST

    댓글

Designed by Tistory.