1. 程式人生 > >selelinum+PhantomJS 爬取拉鉤網職位

selelinum+PhantomJS 爬取拉鉤網職位

one while 對象 bili exe 5.0 設置 expect money

使用selenium+PhantomJS爬取拉鉤網職位信息,保存在csv文件至本地磁盤

拉鉤網的職位頁面,點擊下一頁,職位信息加載,但是瀏覽器的url的不變,說明數據不是發送get請求得到的。

我們不去尋找它的API。這裏使用另一種方式:使用PhantomJS模擬瀏覽,通過單擊頁面獲取下一頁。

這裏的PhantomJS是一個沒有界面的瀏覽器。

 1 from selenium import webdriver
 2 import time
 3 import random
 4 
 5 from selenium.webdriver.common.by import By
 6 from selenium.webdriver.support import
expected_conditions as EC 7 from selenium.webdriver.support.ui import WebDriverWait 8 9 ‘‘‘ 10 使用selenium+PhantomJS爬取拉鉤網職位信息,保存到csv文件至本地磁盤 11 需要加請求頭 12 ‘‘‘ 13 14 15 ‘‘‘ 16 phantomjs.page.customHeaders. :自定義請求頭的固定寫法 17 如:定義代理:phantomjs.page.customHeaders.User-Agent 18 ‘‘‘ 19 dc = { 20 phantomjs.page.customHeaders.User-Agent
:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 21 } 22 23 # 創建瀏覽器對象 24 browser = webdriver.PhantomJS(executable_path=rE:\PycharmProjects\pachong\phantomjs-2.1.1-windows\phantomjs-2.1.1-windows\bin\phantomjs.exe,desired_capabilities=dc)
25 26 # 發送請求 27 browser.get(https://www.lagou.com/jobs/list_?labelWords=&fromSearch=true&suginput=) 28 time.sleep(2) 29 30 # 保存網頁截圖 31 browser.save_screenshot(lagou.png) 32 33 # 實例化wait對象 設置等待超時時間為20秒 34 wait = WebDriverWait(browser,20) 35 36 # # 創建csv文件 37 f = open(lagou.csv,w,encoding=utf-8) 38 39 while True: 40 # 獲取數據 41 job_list = browser.find_elements_by_css_selector(.item_con_list li) 42 for job in job_list: 43 pname = job.find_element_by_tag_name(h3).text 44 ptime = job.find_element_by_class_name(format-time).text 45 company = job.find_element_by_css_selector(.company_name a).text 46 money = job.find_element_by_class_name(money).text 47 exp = job.find_element_by_class_name(li_b_l).text.split( )[1] #這裏的text不取div裏面的標簽的內容,只取div中的內容。類名為li_b_l的div有兩個,經驗屬於第二個,還有一個工作要求的 48 location = job.find_element_by_tag_name(em).text 49 reqtags = job.find_elements_by_css_selector(.li_b_l span) #div的類是li_b_l,裏面含有很多span標簽.會把工資的那一個也包含進來,後面需要處理 50 reqtags = .join([reqtag.text for reqtag in reqtags][1:]) #每個條目的第一項是工資的那個,這裏使用列表的切片去掉。 51 52 # 將數據放入一個列表,便於後面csv文件格式處理,使用,隔開每一項 53 data = [pname,ptime,company,money,exp,location,reqtags] 54 # print(data) 55 f.write(,.join(data) + \n) 56 57 print(data) 58 if pager_next pager_next_disabled not in browser.page_source: 59 # 獲取下一頁按鈕 60 wait.until(EC.element_to_be_clickable((By.CLASS_NAME,pager_next ))) #原網頁中的類的最後有一個空格 61 # 點擊進入下一頁 62 browser.find_element_by_class_name(pager_next ).click() 63 time.sleep(3 + random.random()*1) #時間需要延長一點,時間太短,頁面沒有加載完成,獲取數據會報錯 64 else: 65 break 66 67 # 關閉文件 68 f.close()

selelinum+PhantomJS 爬取拉鉤網職位