파이썬 스크레이핑 대상 링크 수집하기

조회수 98회

아래 코드의 URL1을 접속하면 하단에 페이지가 있습니다. URL1의 마지막부분 page가 1에서 93page까지 있고, 페이지 안에서 제공되는 링크를 수집하고자 하는데,

URL1: https://www.jobplanet.co.kr/companies?sort_by=review_compensation_cache&industry_id=700&page=1

링크정보 수집이 필요한 페이지는 URL2와 같이 각 페이지에서 접근할 수 있는 페이지입니다. URL2: https://www.jobplanet.co.kr/companies/42216

URL2와 같은 각 페이지 내 접근할 수 있는 기업별 정보에 대한 링크 어떻게 코딩해야될지 도움 부탁드립니다.

(URL2 끝부분의 5자리 기업코드 수집방법만 확인을 해주셔도 좋습니다..)

도움 부탁드립니다!!

from bs4 import BeautifulSoup
import csv
import os
import re
import requests
import json

# jobplanet
BaseUrl = 'https://www.jobplanet.co.kr/companies?sort_by=review_compensation_cache&industry_id=700&page='


for i in range(1, 5, 1):
        url = BaseUrl + str(i)
        r = requests.get(url)
        soup = BeautifulSoup(r.text,'lxml')
        body = soup.select('#listCompanies > div > div.section_group > section:nth-child(1) > div > div > dl.content_col2_3.cominfo > dt > a')
        #print(body)

        linkUrl = []
        for item in body:
            link = item.get('href')
            linkUrl.append(link)
print(linkUrl)

1 답변

  • industry_id 값에 따라서 산업군이 나뉘어지니 적당히 넣고 사용하면 되겠지요.

    import requests
    import bs4
    
    def industry_links(industry_id=700):
        company_type = 'https://www.jobplanet.co.kr/companies?sort_by=review_compensation_cache&industry_id={}&page={}'
        company_info = 'https://www.jobplanet.co.kr/companies/{}'
        def get_page_cnt():
            contents = requests.get(company_type.format(industry_id, 1)).content.decode('utf-8')
            soup = bs4.BeautifulSoup(contents, 'html.parser')
            return int(int(soup.find('div', {'class':'result'}).find('span', {'class':'num'}).text) / 10 + 1)
        contents = (requests.get(company_type.format(industry_id, num + 1)).content.decode('utf-8') for num in range(get_page_cnt()))
        return [company_info.format(button['data-company_id']) for content in contents 
                                                                 for button in bs4.BeautifulSoup(content, 'html.parser').find_all('button', {'class', 'btn_heart1'})]
    
    links = industry_links()
    print(links)
    
    ['https://www.jobplanet.co.kr/companies/90364',
     'https://www.jobplanet.co.kr/companies/309507',
     'https://www.jobplanet.co.kr/companies/94877',
     'https://www.jobplanet.co.kr/companies/52769',
     'https://www.jobplanet.co.kr/companies/307694',
     'https://www.jobplanet.co.kr/companies/20575',
     'https://www.jobplanet.co.kr/companies/16738',
    ...
    ...
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.