셀레늄 크롤러 크롤러 정보를 이용하여 22-

1. 일반 쿠키 풀 훅 웹 크롤링 데이터 아약스

가져 오기 요청
lxml이 수입 etree에서
수입 시간
수입 재
헤더 = {
    "사용자 에이전트": "모질라 / 5.0 (윈도우 NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, 도마뱀 붙이 등) 크롬 / 65.0.3325.181 사파리 / 537.36",
    "리퍼러": "https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
    LG_LOGIN_USER_ID = 5b895ff2a4e23c48dc4c9110a6a1361bbf709630b5b17ac6756340fef1babfbf; LG_HAS_LOGIN = 1; showExpriedIndex = 1; showExpriedCompanyHome = 1; showExpriedMyPublish = 1; hasDeliver = 0; privacyPolicyPopup = 거짓; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6 = 1583857959,1583912708,1583912713; JSESSIONID = ABAAAECABGFABFF1412C84500FD39A23D7C1D5172179D66; WEBTJ-ID = 20200315123348-170dc782d0e4cf-05e9fb23740e5e-3a614f0b-2073600-170dc782d0f63d; _gid = GA1.2.1720707822.1584246829; _putrc = 387928C58CE0A7D1123F89F2B170EADC; = true로 로그인; unick = % E7 % 90 % B3 %의 E7의 % 90 % B3; TG-TRACK-CODE = index_search; X_MIDDLE_TOKEN = 0a8830791829a77f99654a1bb3d568ae; LGSID = 20200315140707-568ce08c-c655-44b2-9cd4-66632e1bb6f4; PRE_UTM =; PRE_HOST =; PRE_SITE = HTTPS % 3A % 2F % 2Fwww.lagou.com; PRE_LAND = HTTPS % 3A % 2F % 2Fwww.lagou. COM % 2Fjobs % 2Flist % 5Fpython % 2Fp 도시 % 5F0 % 3F % 26cl % 3Dfalse % 26fromSearch % 3Dtrue % 26labelWords % 3D % 26suginput % 3D; _gat = 1; SEARCH_ID = 79abbbd66c2b4a59b7ca19ee8fb77e01; X_HTTP_TOKEN = 9944cc335d13b0d30552524851b568c7665cd1a0ff; LGRID = 20200315140911-acf5dfc4-1c8f-4943-a93f-983d364a96db "
    "기원": "https://www.lagou.com"
    'X-ANIT - 포지 - 코드': "0",
    "X -Anit - 포지 - 토큰": "없음"
    "X-요청-와": "XMLHttpRequest를"
}
위치 = []

데프 request_list_page () :
    URL = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"

    데이터 = {
        "프리스트": "거짓"
        "PN": "1"
        "KD": "파이썬"
    }
    (1,10)의 범위 X의 경우 :
        데이터 [ 'PN'= X
        응답 = requests.post (URL 데이터 = 데이터 헤더 = 헤더)
        결과 response.json = () # 반환 데이터를 사전로드하는 경우 JSON
        위치 결과 = [ '콘텐츠'] [ 'positionResult'] [ '결과']
        위치에 위치에 대한 :
            positionId 위치 = [ 'positionId'] # 페이지 ID를 찾아있어서
            position_url = 'HTTPS : //www.lagou.com/jobs/%s.html'%positionId
            parse_position_detail (position_url)
            단절
        time.sleep (2)
        단절

데프 parse_position_detail (URL) :
    응답 = requests.get (URL 헤더 = 헤더)
    텍스트 = response.text
    HTML = etree.HTML (텍스트)
    이름 = html.xpath ( "// DIV [클래스 = '작업 이름'@] / @ 제목") [0]
    job_span = html.xpath ( "// DD [@ 클래스 = 'job_request'] // 범위")
    급여 job_span = [0] .xpath ( '.// 텍스트 ()') [0] .strip ()
    도시 job_span = [1] .xpath ( ".// 텍스트 ()") [0] .strip ()
    도시의 re.sub = (R "[\ S /]", "", 도시)
    위치 = {
        '이름': 이름,
        '급여': 급여,
        '도시'도시
    }
    positions.append (위치)

데프 주 () :
    request_list_page ()
    인쇄 (위치)
__name__ == '__main__'의 경우 :
    본관()

  

2. 셀레늄 당김 후크 웹 크롤링 데이터 AJAX

#encoding : UTF-8

셀레늄 수입 webdriver에서
lxml이 수입 etree에서
수입 재
수입 시간
selenium.webdriver.support.ui 수입 WebDriverWait에서
EC로 selenium.webdriver.support 가져 오기 expected_conditions에서
으로 selenium.webdriver.common.by 가져 오기에서

클래스 LagouSpider (객체) :
    데프 __ (자기) __init :
        self.driver webdriver.Firefox = ()
        self.url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
        self.positions = []

    데프 (자동)를 실행 :
        self.driver.get (self.url)
        진정한 동안 :
            소스 = self.driver.page_source
            .until WebDriverWait (= 드라이버 self.driver, 제한 = 10) (
                EC.presence_of_element_located ((By.XPATH "DIV [클래스 @ = 'pager_container'] / 스팬 [마지막 ()]"))
            )
            self.parse_list_page (소스)
            시험:
                next_btn = self.driver.find_element_by_xpath ( "// DIV / 스팬 [클래스 = 'pager_container'@] 마지막 ()]")
                경우 next_btn.get_attribute에서 ( "클래스") "pager_next_disabled"
                    단절
                그밖에:
                    next_btn.click ()
            외:
                인쇄 (소스)
            time.sleep (1)

    데프 parse_list_page (자동 소스) :
        HTML etree.HTML = (소스)
        링크 html.xpath = ( "// A [클래스 @ = 'position_link'] / @ HREF")
        링크에 링크 :
            self.request_detail_page (링크)
            time.sleep (1)

    데프 request_detail_page (자기, URL) :
        # self.driver.get (URL)
        self.driver.execute_script ( "window.open ( '% S')"%의 URL) # 새 탭을 열
        새로운 태그 self.driver.switch_to.window (self.driver.window_handles [1]) # 드라이버
        .until WebDriverWait (self.driver, 제한 = 10) (
            EC.presence_of_element_located ((By.XPATH, "// DIV [클래스 @ = '작업 이름']"))
        )
        소스 = self.driver.page_source
        self.parse_detail_page (소스)
        이 페이지의 self.driver.close () # 가까운 현재 세부 사항
        self.driver.switch_to.window (self.driver.window_handles [0]) #은 작업 목록 페이지로 다시 전환 계속


    데프 parse_detail_page (자동 소스) :
        HTML etree.HTML = (소스)
        이름 = html.xpath ( "// DIV [클래스 = '작업 이름'@] / @ 제목") [0]
        job_span = html.xpath ( "// DD [@ 클래스 = 'job_request'] // 범위")
        급여 job_span = [0] .xpath ( '.// 텍스트 ()') [0] .strip ()
        도시 job_span = [1] .xpath ( ".// 텍스트 ()") [0] .strip ()
        도시의 re.sub = (R "[\ S /]", "", 도시)
        위치 = {
            '이름': 이름,
            '급여': 급여,
            '도시'도시
        }
        self.positions.append (위치)
        인쇄 (위치)
        인쇄 ( '='* 40)


__name__ == '__main__'의 경우 :
    거미 LagouSpider = ()
    spider.run ()

  

추천

출처www.cnblogs.com/wcyMiracle/p/12500036.html