selenium 트랙터 데이터 분석 직책의 모든 직위 정보 찾기

17367 단어 필기
탭넷은 특정 직위 정보에 대해 최대 30페이지만 표시하기 때문에 필자는 서로 다른 검색 조건을 바꾸어 더 많은 직위 정보를 얻을 수 있다.본고의 방법은 반자동화된selenium이므로 개선할 수 있는 부분이 많지만 참고 학습만 제공한다.
1. 키워드가 데이터 분석가의 메인 페이지에 들어가기
from lxml import etree
from selenium.webdriver import Chromefrom selenium.webdriver.common.keys import Keys
import timeimport pandas as pd
#        
web=Chrome()
web.get("https://www.lagou.com") 
#    
web.find_element_by_xpath('//[@id="cboxClose"]').click()  #     
time.sleep(3)
web.find_element_by_xpath('//*[@id="search_input"]').send_keys('     ', Keys.ENTER)  #     
time.sleep(2)
web.find_element_by_xpath('/html/body/div[8]/div/div[2]').click()  #       
time.sleep(2)

2, 선별 조건, 각 조건의 모든 페이지의 html 순환 획득
  • 여기서 저는 주로 회사 인원수와 융자 상황을 선별했습니다. 그 중에서 회사 인원수가 2천 이하일 때 융자 상황을 선별할 필요가 없습니다. 왜냐하면 2천 이하의 몇 등급에서 직위 수량 페이지가 30페이지가 안 되기 때문입니다.회사 수가 2천 명 이상인 조건에서 데이터 분석가의 직위는 이미 30페이지가 찼다.그래서 이 조건에서 저는 융자 상황 조건을 추가했습니다. 어떤 융자 상황 조건에서 관련이 없는 직위 정보가 나타날 수 있기 때문에 몇 페이지부터 이런 관련이 없는 직위 정보가 있는 페이지 번호를 판단하기 위해 판단해야 합니다.이런 방식을 통해 모든 데이터 분석가의 직위를 얻을 수 있다.
  • 여기서 설명하고 강조해야 할 점은 필자의 방법은 반자동이지만 매우 효과적이라는 것이다.반자동은 각 조건하에서 html을 얻는 데 나타난다. 인위적인 설정이 다음 페이지를 반복적으로 클릭하는 횟수로 현재 조건하에서 각 페이지의 html을 획득해야 한다.만약에 현재 선별 조건에서 20페이지의 직위 정보가 있다면 순환 횟수를 19(첫 페이지의 html은 다음 페이지를 클릭하지 않아도 얻을 수 있기 때문)로 설정해야 한다. 구체적인 코드는 다음과 같다
  • #     
    web.find_element_by_xpath('//*[@id="filterCollapse"]/li[4]/a[7]').click()
    #       ,      a   
    time.sleep(1)
    web.find_element_by_xpath('//*[@id="filterCollapse"]/li[3]/a[9]').click()
    #        ,        a   
    time.sleep(2)
    first_html = web.page_source    
    #   n HTML   
    #              html
    html_list =[]
    html_list.append(first_html)
    for i in range(10):    
    #     ,                         
        web.find_element_by_xpath('//*[@id="s_position_list"]/div[2]/div/span[last()]').click()   
        time.sleep(2)
        html_list.append(web.page_source)
    print('       HTML      !!')
    

    3. html을 해석하고 필요한 정보를 데이터 프레임을 통해 csv 형식으로 저장
    #    
    n = 1
    for page in html_list:    
        print('     '+str(n)+' ..')    
        n+=1    
        html=etree.HTML(page)
        li_list=html.xpath('//*[@id="s_position_list"]/ul/li') 
    #         Li              CSV     for i in li_list:        position_name=i.xpath('./@data-positionname')[0]        company_name=i.xpath('./@data-company')[0]        salary = i.xpath('./@data-salary')[0]        company_scale=i.xpath('./div[1]/div[2]/div[2]/text()')[0].strip().split('/')[-1]        company_type = i.xpath('./div[1]/div[2]/div[2]/text()')[0].strip().split('/')[0]        company_finace = i.xpath('./div[1]/div[2]/div[2]/text()')[0].strip().split('/')[1]        company_edu = i.xpath('./div[1]/div[1]/div[2]/div/text()')[-1].strip().split('/')[-1]        work_year = i.xpath('./div[1]/div[1]/div[2]/div/text()')[-1].strip().split('/')[0]        work_city = i.xpath('./div[1]/div[1]/div[1]/a/span/em/text()')[0].split('·')[0]        city_detail = i.xpath('./div[1]/div[1]/div[1]/a/span/em/text()')[0].split('·')[-1]        #  dataframe   csv        data=[(position_name,salary,work_city,city_detail,work_year,company_name,            company_edu,company_type,company_finace,            company_scale)]        lagou=pd.DataFrame(data)        lagou.to_csv("lagou.csv", header=False, index=False, mode="a+")
    

    파충류 과정에서 로그인한 페이지가 튀어나올 수 있습니다. 이것은 제가 27페이지를 한 번에 올라가야 하는 상황에서 한 번 만났을 뿐입니다. 다시 한 번 시도하면 OK입니다. 아니면 로그인한 후에 올라가는 것으로 바꿀 수도 있고 판단을 최적화할 수도 있습니다.순환으로 html을 얻으려면 수동으로 순환 횟수를 설정해야 하는 부분에 대해 판단을 추가할 수 있다. 만약에 다음 페이지의 단추를 찾지 못하면 순환에서 벗어나 수동 선별 조건에 대해 순환을 추가하여 모든 조건을 두루 돌아다닐 수 있다.

    좋은 웹페이지 즐겨찾기