亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python爬蟲小例子——爬取51job發(fā)布的工作職位

 更新時間:2020年07月10日 11:43:44   作者:Alan.hsiang  
這篇文章主要介紹了Python爬取51job發(fā)布的工作職位,文中講解非常細致,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下

概述

不知從何時起,Python和爬蟲就如初戀一般,情不知所起,一往而深,相信很多朋友學習Python,都是從爬蟲開始,其實究其原因,不外兩方面:其一Python對爬蟲的支持度比較好,類庫眾多。其二Pyhton的語法簡單,入門容易。所以兩者形影相隨,不離不棄,本文主要以一個簡單的小例子,簡述Python在爬蟲方面的簡單應用,僅供學習分享使用,如有不足之處,還請指正。

涉及知識點

本例主要爬取51job發(fā)布的工作職位,用到的知識點如下:

  • 開發(fā)環(huán)境及工具:主要用到Python3.7 ,IDE為PyCharm
  • requests類庫:本類庫封裝了python的內置模塊,主要用于網絡的請求和獲取數據,可以支持不同形式的請求。
  • BeautifulSoup庫:主要用于解析獲取的數據,包括Html,Xml,Json等不同的格式。
  • 數據持久化:主要是將內存中的數據,保存到數據庫或者文件中。

爬蟲的基本步驟

爬蟲的基本步驟,如下圖所示:

爬取目標

如有要爬取相關內容,首先要對爬取的目標進行分析,了解其目錄結構,才能進行解析。本例主要爬取51job中的工作列表,如下所示:

核心源碼

1.獲取數據

定義一個函數get_data,用于發(fā)起請求并獲取數據,如下所示:

headers中的User-Agent主要用于模擬瀏覽器,不然會被反爬蟲程序屏蔽,http狀態(tài)碼為418,意思是被網站的反爬程序返回的。

encoding是要爬取的網站的編碼為gbk,如果不加,會產生亂碼,默認為utf-8

def get_data(req_url):
  """獲取數據"""
  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' # 不加會產生中文亂碼
  if resp.status_code == 200:
    return resp.text
  else:
    return None

2.解析數據

定義一個函數parse_data,用于解析獲取到的內容,如下所示:

采用BeautifulSoup,將返回的文本,解析成html對象,并獲取對應的內容。本例主要獲取工作的列表

def parse_data(resp_html):
  """解析數據,并返回列表"""
  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.保存數據

定義一個函數save_data,用于將獲取到的內容保存到json文件中,如下所示:

with函數 可以自動進行釋放。因包含中文,所以json文件的編碼為utf-8,否則會出現亂碼

 def save_data(res_list):
   """保存數據"""
   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.整體調用步驟

依次調用定義的三個函數,如下所示:

if __name__ == '__main__':
  """如果是主程序自己調用"""
  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&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
  # 獲取數據
  resp_html = get_data(req_url)
  # print(html)
  # 解析數據
  res_list = parse_data(resp_html)
  # 保存數據
  save_data(res_list)

爬取結果展示

爬取的結果保存在jobs.json文件中,如下所示:

[
 {
  "工作名稱": "Java架構師",
  "公司": "深圳市鉆木信息技術有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "1.8-3萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java實習生 6k起",
  "公司": "深圳市智玩創(chuàng)新科技有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "6-8千/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java實習生6k起",
  "公司": "深圳市康姆達科技有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "6-8千/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "深圳市網新新思軟件有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "1.5-1.7萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "深圳市睿服科技有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "1.3-1.7萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)經理",
  "公司": "深圳市聚惠企業(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ā)工程師",
  "公司": "深圳易世通達科技有限公司",
  "工作地址": "深圳-南山區(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 有物流類經驗",
  "公司": "深圳市歐恩德技術有限公司",
  "工作地址": "深圳-羅湖區(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 高級軟件工程師",
  "公司": "相通網絡技術有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "1.5-3萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "JAVA開發(fā)工程師(接受應屆生)",
  "公司": "深圳市智巖科技有限公司",
  "工作地址": "深圳-南山區(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平臺架構師(Java方向)",
  "公司": "深圳市智布互聯(lián)紡織科技有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "1.7-2.5萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)實習生",
  "公司": "云軟科技",
  "工作地址": "深圳-寶安區(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)智融信息技術有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "1.3-1.8萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "得實信息科技(深圳)有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "0.6-1萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "深圳市聯(lián)創(chuàng)科技集團有限公司",
  "工作地址": "深圳-龍崗區(qū)",
  "薪資水平": "1-1.5萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "中級JAVA(J13824)",
  "公司": "銀雁科技服務集團股份有限公司",
  "工作地址": "深圳-福田區(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工程師",
  "公司": "深圳市開度貿易有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "0.8-1.2萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "后臺開發(fā)Leader(JAVA方向)",
  "公司": "深圳金世紀保險經紀有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "3-4萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "深圳市中深力人力資源管理有限公司...",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "1-1.5萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發(fā)工程師",
  "公司": "研祥高科技控股集團有限公司",
  "工作地址": "深圳-光明新區(qū)",
  "薪資水平": "0.9-1.8萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java(證券不加班)",
  "公司": "上海華騰軟件系統(tǒng)有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "1.8-2.2萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發(fā)工程師",
  "公司": "深圳大美商業(yè)地產管理有限公司",
  "工作地址": "深圳-福田區(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ā)工程師",
  "公司": "深圳市藍鷹立德軟件咨詢有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "1.5-1.8萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "JAVA(高級、架構)",
  "公司": "深圳市幾米物聯(lián)有限公司",
  "工作地址": "深圳-寶安區(qū)",
  "薪資水平": "2.2-3.2萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "JAVA開發(fā)工程師",
  "公司": "江蘇康尚生物醫(yī)療科技有限公司",
  "工作地址": "深圳-寶安區(qū)",
  "薪資水平": "1-1.5萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "java架構師",
  "公司": "深圳市泓齊網絡科技有限公司",
  "工作地址": "深圳",
  "薪資水平": "1.5-1.8萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "深圳市智璟科技有限公司",
  "工作地址": "深圳-福田區(qū)",
  "薪資水平": "0.9-1.5萬/月",
  "發(fā)布時間": "06-13"
 },
 {
  "工作名稱": "Java開發(fā)工程師",
  "公司": "上海舟恩信息技術有限公司",
  "工作地址": "深圳-南山區(qū)",
  "薪資水平": "1.4-1.9萬/月",
  "發(fā)布時間": "06-13"
 }
]

進一步思考

本例可以進一步優(yōu)化的空間,如下所示:

  • 本次爬蟲只是單次爬取,數據量相對小,如果要爬取大量數據的時候,則需要使用多線程相關的知識。
  • 基礎的爬蟲,只能爬取靜態(tài)渲染的內容,如果是異步動態(tài)渲染的數據,如何爬取呢?
  • 將爬取的結果保存到數據庫如何操作呢?

以上就是Python爬蟲小例子——爬取51job發(fā)布的工作職位的詳細內容,更多關于Python爬蟲爬取工作職位的資料請關注腳本之家其它相關文章!

相關文章

  • Pycharm連接遠程服務器并實現遠程調試的實現

    Pycharm連接遠程服務器并實現遠程調試的實現

    這篇文章主要介紹了Pycharm連接遠程服務器并實現遠程調試的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python使用Pillow將照片轉換為1寸報名照片的教程分享

    python使用Pillow將照片轉換為1寸報名照片的教程分享

    在現代科技時代,我們經常需要調整和處理照片以適應特定的需求和用途,本文將介紹如何使用wxPython和Pillow庫,通過一個簡單的圖形界面程序,將選擇的照片轉換為指定尺寸的JPG格式,并保存在桌面上,需要的朋友可以參考下
    2023-09-09
  • Python函數裝飾器的使用教程

    Python函數裝飾器的使用教程

    在了解了Python函數裝飾器基礎知識和閉包之后,開始正式學習函數裝飾器。感興趣的朋友可以參考本文
    2021-06-06
  • Python3.5實現的三級菜單功能示例

    Python3.5實現的三級菜單功能示例

    這篇文章主要介紹了Python3.5實現的三級菜單功能,涉及Python針對json格式數據的讀取、遍歷、查找、判斷等相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • pandas條件組合篩選和按范圍篩選的示例代碼

    pandas條件組合篩選和按范圍篩選的示例代碼

    這篇文章主要介紹了pandas條件組合篩選和按范圍篩選的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Python使用Keras OCR實現從圖像中刪除文本

    Python使用Keras OCR實現從圖像中刪除文本

    這篇文章主要為大家介紹了如何在Python中利用Keras OCR實現快速地從圖像中刪除文本,從而作為圖像分類器的預處理步驟,需要的可以參考一下
    2022-03-03
  • Python之requests的使用(二)

    Python之requests的使用(二)

    上一篇我們說了requests的簡單用法,知道了如何發(fā)送請求,今天我們更深層次的來學習requests。我們看看高級一點的操作,比如講文件上傳,cookies設置,代理設置之類的。感興趣的同學可以參考閱讀
    2023-04-04
  • 基于PyQT5制作一個桌面摸魚工具

    基于PyQT5制作一個桌面摸魚工具

    這篇文章主要介紹了如何利用PyQT5制作一個桌面摸魚工具,利用摸魚,打開小說,可實行完美摸魚,實時保存進度,快來跟隨小編一起動手試一試吧
    2022-02-02
  • Pycharm遠程調試openstack的方法

    Pycharm遠程調試openstack的方法

    這篇文章主要為大家詳細介紹了Pycharm遠程調試openstack的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python面向對象程序設計之類的定義與繼承簡單示例

    Python面向對象程序設計之類的定義與繼承簡單示例

    這篇文章主要介紹了Python面向對象程序設計之類的定義與繼承,結合完整實例形式分析了Python面向對象程序設計中類的定義、調用、繼承及相關操作注意事項,需要的朋友可以參考下
    2019-03-03

最新評論