selenium+PyQuery+chrome headless 爬取智聯招聘求職資訊
阿新 • • 發佈:2018-12-13
最近導師讓自己摸索摸索Python爬蟲,好了就開始一發不可收拾的地步。正巧又碰到有位同學需要一些求職資訊對求職資訊進行資料分析,本著練練手的目的寫了用Python爬取智聯招聘網站的資訊。這一爬取不得了,智聯網站更新了,以前的大佬們的程式碼不能用,而且全是動態載入,反爬蟲著實對於小白的我實在是累的不行,靜態還沒怎麼學會動態的爬取就開始了,各種遇見坑,再出來。不過終於功夫不負有心人,也算是馬馬虎虎搞出來了。先上圖
一個檔案裡面大概不到3000條資料,不算多。
首先,我就不講什麼是selenium,以及怎麼安裝還有chrome 的headless怎麼使用。這裡csdn上面有很多大牛已經給予完美的解釋了ps主要我也說不好只是瞭解以及使用。
當你把這些基礎性工作做完了,比如Python安裝完畢,以及selenium PyQuery安裝完畢後就可以看我的程式碼詳解了。其實大家都是小白所以程式碼會有詳細的註釋,看看註釋就明白了。廢話不多說直接上程式碼,有啥不懂得歡迎諮詢我。[email protected],或者留言給我。謝謝各位看官。
#首頁負責呼叫
import savecsv as save
pagenum=int(input("輸入您要爬取的頁數"))
save.savecsv(pagenum)
# 爬取文章 from selenium import webdriver import time, random from pyquery import PyQuery as pq import os from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys def _urldata_(url, pageNum): # 新版本不支援phantomjs # browser = webdriver.PhantomJS() # 採用瀏覽器自帶的無頭瀏覽器進行查詢 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') browser = webdriver.Chrome(options=chrome_options) browser.get(url) # # 定義一個大的列表將一個職位所有的招聘資訊都放進去 joblist = [] # 點選下一頁進行訪問頁面 for i in range(1, pageNum+1): # 對動態網頁查詢並使用pyquery進行分析 doc = pq(browser.page_source) # 獲取一個多個相同屬性 # htm = doc('[class="listItemBox clearfix"]') # print(htm) html = doc('[class="listItemBox clearfix"]').items() listSum = [] # 獲取單個屬性 for tb in html: # 定義一個空字典,用於儲存陣列 item = {} # 提取崗位 job_title_info = tb('.job_title') job_title = job_title_info.attr('title') # 獲取公司名 company_title = tb('.company_title').text() # 獲取薪資 job_saray = tb('.job_saray').text() # 獲取地址,工作要求年限,學歷 job_demand = tb('.demand_item').items() job_demand_info = [] for job in job_demand: job_demand_info.append(job.text()) # 獲取企業名稱以及企業人數 commpanyDesc = tb('.info_item').items() company_info = [] for job in commpanyDesc: company_info.append(job.text()) # 獲取更詳細的資訊 job_welfare = tb('.welfare_item').items() job_welfare_info = [] for job in job_welfare: job_welfare_info.append(job.text()) job_welfare_info_list = "|".join(job_welfare_info) # 填入陣列 item['job_title'] = job_title item['company_title'] = company_title item['job_saray'] = job_saray item['job_demand_info_address'] = job_demand_info[0] item['job_demand_info_age'] = job_demand_info[1] item['job_demand_info_back'] = job_demand_info[2] item['company_info_back'] = company_info[0] item['job_welfare_info_list'] = job_welfare_info_list listSum.append(item) # 將所有的頁面的內容進行儲存 joblist += listSum browser.find_elements_by_class_name('btn-pager')[1].click() print("爬取第" + str(i) + "頁") print("資料共" + str(len(listSum)) + "條") # 防止被和諧 p = random.randint(1, 4) time.sleep(p) return joblist browser.quit() # _urldata_('https://sou.zhaopin.com/?pageSize=60&jl=530&kw=python&kt=3')
# 儲存成csv格式 import csv import spiderurl as combin def savecsv(pageNum): # 定義一個大的列表將所有的招聘資訊都放進去 job_name = ['python', 'java', '機器學習', '資料探勘', 'c++'] # job_name = ['python'] # 工作名字 for job in job_name: # print(job) joblist = [] # 將頁面讀取的資料儲存起來 # 每個工作的名字工作資訊 url = 'https://sou.zhaopin.com/?pageSize=60&jl=530&kw=' + job + '&kt=3' print("開始爬取工作:"+job+"地址是:"+url) # 拼接完成爬取檔案並解析 joblist = combin._urldata_(url, pageNum) # 把資料存成csv格式 filenames = ["job_title", "company_title", "job_saray", "job_demand_info_address", "job_demand_info_age", "job_demand_info_back", "company_info_back", "job_welfare_info_list"] for list in joblist: # 以字典的形式寫入檔案 with open(job + ".csv", "a", errors="ignore", newline='') as fp: f_csv = csv.DictWriter(fp, fieldnames=filenames) f_csv.writerow(list)
歡迎評論,我會及時回覆的。