您好,登錄后才能下訂單哦!
小編給大家分享一下如何爬取51job發(fā)布的工作職位,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
概述
不知從何時起,Python和爬蟲就如初戀一般,情不知所起,一往而深,相信很多朋友學(xué)習(xí)Python,都是從爬蟲開始,其實究其原因,不外兩方面:其一Python對爬蟲的支持度比較好,類庫眾多。其二Pyhton的語法簡單,入門容易。所以兩者形影相隨,不離不棄,本文主要以一個簡單的小例子,簡述Python在爬蟲方面的簡單應(yīng)用,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正。
涉及知識點
本例主要爬取51job發(fā)布的工作職位,用到的知識點如下:
爬蟲的基本步驟
爬蟲的基本步驟,如下圖所示:
爬取目標(biāo)
如有要爬取相關(guān)內(nèi)容,首先要對爬取的目標(biāo)進(jìn)行分析,了解其目錄結(jié)構(gòu),才能進(jìn)行解析。本例主要爬取51job中的工作列表,如下所示:
核心源碼
1.獲取數(shù)據(jù)
定義一個函數(shù)get_data,用于發(fā)起請求并獲取數(shù)據(jù),如下所示:
headers中的User-Agent主要用于模擬瀏覽器,不然會被反爬蟲程序屏蔽,http狀態(tài)碼為418,意思是被網(wǎng)站的反爬程序返回的。
encoding是要爬取的網(wǎng)站的編碼為gbk,如果不加,會產(chǎn)生亂碼,默認(rèn)為utf-8
def get_data(req_url): """獲取數(shù)據(jù)""" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko', 'Accept-Language': 'zh-Hans-CN, zh-Hans;q=0.5' } resp = requests.get(req_url, headers=headers) resp.encoding = 'gbk' # 不加會產(chǎn)生中文亂碼 if resp.status_code == 200: return resp.text else: return None
2.解析數(shù)據(jù)
定義一個函數(shù)parse_data,用于解析獲取到的內(nèi)容,如下所示:
采用BeautifulSoup,將返回的文本,解析成html對象,并獲取對應(yīng)的內(nèi)容。本例主要獲取工作的列表
def parse_data(resp_html): """解析數(shù)據(jù),并返回列表""" soup = BeautifulSoup(resp_html, features='html.parser') job_table = soup.find('div', attrs={'class': 'dw_table'}) # print(job_table) job_list = job_table.find_all('div', attrs={'class': 'el'}) # print(job_list) # 循環(huán)列表,去掉第一個title和最后一個 res_list = [] for job in job_list[1: -1]: job_name = job.find('p', attrs={'class': "t1"}).find('span').find('a').get_text() job_name = job_name.replace('\r\n', '').strip() job_company = job.find('span', attrs={'class': "t2"}).find('a').get_text() job_addr = job.find('span', attrs={'class': "t3"}).get_text() job_salary = job.find('span', attrs={'class': "t4"}).get_text() job_time = job.find('span', attrs={'class': "t5"}).get_text() # print('工作信息:', job_name, '---', job_company, '---', job_addr, '---', job_salary, '---', job_time) res_item = { '工作名稱': job_name, '公司': job_company, '工作地址': job_addr, '薪資水平': job_salary, '發(fā)布時間': job_time } res_list.append(res_item) return res_list
3.保存數(shù)據(jù)
定義一個函數(shù)save_data,用于將獲取到的內(nèi)容保存到j(luò)son文件中,如下所示:
with函數(shù) 可以自動進(jìn)行釋放。因包含中文,所以json文件的編碼為utf-8,否則會出現(xiàn)亂碼
def save_data(res_list): """保存數(shù)據(jù)""" with open('jobs.json', 'w', encoding='utf-8') as f: res_list_json = json.dumps(res_list, ensure_ascii=False) f.write(res_list_json)
4.整體調(diào)用步驟
依次調(diào)用定義的三個函數(shù),如下所示:
if __name__ == '__main__': """如果是主程序自己調(diào)用""" req_url = 'https://search.51job.com/list/040000,000000,0000,00,9,99,java,2,1.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=' # 獲取數(shù)據(jù) resp_html = get_data(req_url) # print(html) # 解析數(shù)據(jù) res_list = parse_data(resp_html) # 保存數(shù)據(jù) save_data(res_list)
爬取結(jié)果展示
爬取的結(jié)果保存在jobs.json文件中,如下所示:
[ { "工作名稱": "Java架構(gòu)師", "公司": "深圳市鉆木信息技術(shù)有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.8-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java實習(xí)生 6k起", "公司": "深圳市智玩創(chuàng)新科技有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "6-8千/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java實習(xí)生6k起", "公司": "深圳市康姆達(dá)科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "6-8千/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市網(wǎng)新新思軟件有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1.5-1.7萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市睿服科技有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.3-1.7萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)經(jīng)理", "公司": "深圳市聚惠企業(yè)登記代理有限公司", "工作地址": "深圳-龍華新區(qū)", "薪資水平": "1-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "高級JAVA", "公司": "深圳易加油信息科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1.5-2.1萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "深圳市綠聯(lián)科技有限公司", "工作地址": "深圳-龍華新區(qū)", "薪資水平": "2-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市博悅科創(chuàng)科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "易普森智慧健康科技(深圳)有限公...", "工作地址": "深圳", "薪資水平": "1.5-2.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳易世通達(dá)科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1.2-1.8萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "蘇州今融加科技有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.5-2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java后端開發(fā)工程師", "公司": "深圳市長隆科技有限公司", "工作地址": "深圳-龍崗區(qū)", "薪資水平": "1.5-2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市元諾智能系統(tǒng)有限公司", "工作地址": "深圳-龍華新區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "java 有物流類經(jīng)驗", "公司": "深圳市歐恩德技術(shù)有限公司", "工作地址": "深圳-羅湖區(qū)", "薪資水平": "0.8-1.1萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師-2020校園招聘", "公司": "金蝶軟件(中國)有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "0.8-1.6萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "豐疆智能科技股份有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "2.5-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA軟件開發(fā)工程師", "公司": "深圳市吉星時代科技有限公司", "工作地址": "深圳-龍崗區(qū)", "薪資水平": "2-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA 高級軟件工程師", "公司": "相通網(wǎng)絡(luò)技術(shù)有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.5-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA開發(fā)工程師(接受應(yīng)屆生)", "公司": "深圳市智巖科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "0.8-1萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java后臺開發(fā)工程師", "公司": "深圳市炬馳科技發(fā)展有限公司", "工作地址": "深圳", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市韶音科技有限公司", "工作地址": "深圳-寶安區(qū)", "薪資水平": "0.8-1萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA 開發(fā)工程師", "公司": "深圳市優(yōu)博訊科技股份有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市有豆科技有限公司", "工作地址": "深圳-寶安區(qū)", "薪資水平": "1.8-3萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Saas平臺架構(gòu)師(Java方向)", "公司": "深圳市智布互聯(lián)紡織科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1.7-2.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)實習(xí)生", "公司": "云軟科技", "工作地址": "深圳-寶安區(qū)", "薪資水平": "6-9千/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "深圳市阿爾法智匯科技有限公司", "工作地址": "深圳-寶安區(qū)", "薪資水平": "2-4萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java 全棧開發(fā)工程師", "公司": "深圳市杰納斯科技有限公司", "工作地址": "深圳-寶安區(qū)", "薪資水平": "1-3.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "中高級java工程師", "公司": "北京聯(lián)創(chuàng)智融信息技術(shù)有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.3-1.8萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "得實信息科技(深圳)有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "0.6-1萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市聯(lián)創(chuàng)科技集團(tuán)有限公司", "工作地址": "深圳-龍崗區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "中級JAVA(J13824)", "公司": "銀雁科技服務(wù)集團(tuán)股份有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "java工程師", "公司": "深圳市安思疆科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "0.8-1.6萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA 高級開發(fā)工程師", "公司": "匯才保險代理(深圳)有限公司", "工作地址": "深圳-羅湖區(qū)", "薪資水平": "1.5-2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師(直連)", "公司": "深圳市天泰國際航空旅行社有限公司...", "工作地址": "深圳", "薪資水平": "2-4萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA工程師", "公司": "深圳市開度貿(mào)易有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "0.8-1.2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "后臺開發(fā)Leader(JAVA方向)", "公司": "深圳金世紀(jì)保險經(jīng)紀(jì)有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "3-4萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市中深力人力資源管理有限公司...", "工作地址": "深圳-南山區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "研祥高科技控股集團(tuán)有限公司", "工作地址": "深圳-光明新區(qū)", "薪資水平": "0.9-1.8萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java(證券不加班)", "公司": "上海華騰軟件系統(tǒng)有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.8-2.2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "深圳大美商業(yè)地產(chǎn)管理有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "1.5-2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "資深/高級Java工程師", "公司": "未來穿戴(深圳)有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "3-4萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "深圳市太陽星通信科技有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "0.8-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java高級開發(fā)工程師", "公司": "深圳市藍(lán)鷹立德軟件咨詢有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1.5-1.8萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA(高級、架構(gòu))", "公司": "深圳市幾米物聯(lián)有限公司", "工作地址": "深圳-寶安區(qū)", "薪資水平": "2.2-3.2萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "JAVA開發(fā)工程師", "公司": "江蘇康尚生物醫(yī)療科技有限公司", "工作地址": "深圳-寶安區(qū)", "薪資水平": "1-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "java架構(gòu)師", "公司": "深圳市泓齊網(wǎng)絡(luò)科技有限公司", "工作地址": "深圳", "薪資水平": "1.5-1.8萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "深圳市智璟科技有限公司", "工作地址": "深圳-福田區(qū)", "薪資水平": "0.9-1.5萬/月", "發(fā)布時間": "06-13" }, { "工作名稱": "Java開發(fā)工程師", "公司": "上海舟恩信息技術(shù)有限公司", "工作地址": "深圳-南山區(qū)", "薪資水平": "1.4-1.9萬/月", "發(fā)布時間": "06-13" } ]
進(jìn)一步思考
本例可以進(jìn)一步優(yōu)化的空間,如下所示:
看完了這篇文章,相信你對如何爬取51job發(fā)布的工作職位有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。