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 ()