一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python爬蟲小例子——爬取51job發布的工作職位

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

2020-07-10 17:18Alan.hsiang Python

這篇文章主要介紹了Python爬取51job發布的工作職位,文中講解非常細致,幫助大家更好的理解和學習Python,感興趣的朋友可以了解下

概述

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

涉及知識點

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

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

爬蟲的基本步驟

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

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

爬取目標

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

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

核心源碼

1.獲取數據

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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對象,并獲取對應的內容。本例主要獲取工作的列表

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)
  # 循環列表,去掉第一個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(' ', '').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,
      '發布時間': job_time
    }
    res_list.append(res_item)
  return res_list

3.保存數據

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

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

?
1
2
3
4
5
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.整體調用步驟

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

?
1
2
3
4
5
6
7
8
9
10
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文件中,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
[
 {
  "工作名稱": "Java架構師",
  "公司": "深圳市鉆木信息技術有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.8-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java實習生 6k起",
  "公司": "深圳市智玩創新科技有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "6-8千/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java實習生6k起",
  "公司": "深圳市康姆達科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "6-8千/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市網新新思軟件有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1.5-1.7萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市睿服科技有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.3-1.7萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發經理",
  "公司": "深圳市聚惠企業登記代理有限公司",
  "工作地址": "深圳-龍華新區",
  "薪資水平": "1-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "高級JAVA",
  "公司": "深圳易加油信息科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1.5-2.1萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "深圳市綠聯科技有限公司",
  "工作地址": "深圳-龍華新區",
  "薪資水平": "2-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市博悅科創科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "易普森智慧健康科技(深圳)有限公...",
  "工作地址": "深圳",
  "薪資水平": "1.5-2.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳易世通達科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1.2-1.8萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "蘇州今融加科技有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.5-2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java后端開發工程師",
  "公司": "深圳市長隆科技有限公司",
  "工作地址": "深圳-龍崗區",
  "薪資水平": "1.5-2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市元諾智能系統有限公司",
  "工作地址": "深圳-龍華新區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "java 有物流類經驗",
  "公司": "深圳市歐恩德技術有限公司",
  "工作地址": "深圳-羅湖區",
  "薪資水平": "0.8-1.1萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師-2020校園招聘",
  "公司": "金蝶軟件(中國)有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "0.8-1.6萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "豐疆智能科技股份有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "2.5-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA軟件開發工程師",
  "公司": "深圳市吉星時代科技有限公司",
  "工作地址": "深圳-龍崗區",
  "薪資水平": "2-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA 高級軟件工程師",
  "公司": "相通網絡技術有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.5-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA開發工程師(接受應屆生)",
  "公司": "深圳市智巖科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "0.8-1萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java后臺開發工程師",
  "公司": "深圳市炬馳科技發展有限公司",
  "工作地址": "深圳",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市韶音科技有限公司",
  "工作地址": "深圳-寶安區",
  "薪資水平": "0.8-1萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA 開發工程師",
  "公司": "深圳市優博訊科技股份有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市有豆科技有限公司",
  "工作地址": "深圳-寶安區",
  "薪資水平": "1.8-3萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Saas平臺架構師(Java方向)",
  "公司": "深圳市智布互聯紡織科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1.7-2.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發實習生",
  "公司": "云軟科技",
  "工作地址": "深圳-寶安區",
  "薪資水平": "6-9千/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "深圳市阿爾法智匯科技有限公司",
  "工作地址": "深圳-寶安區",
  "薪資水平": "2-4萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java 全棧開發工程師",
  "公司": "深圳市杰納斯科技有限公司",
  "工作地址": "深圳-寶安區",
  "薪資水平": "1-3.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "中高級java工程師",
  "公司": "北京聯創智融信息技術有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.3-1.8萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "得實信息科技(深圳)有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "0.6-1萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市聯創科技集團有限公司",
  "工作地址": "深圳-龍崗區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "中級JAVA(J13824)",
  "公司": "銀雁科技服務集團股份有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "java工程師",
  "公司": "深圳市安思疆科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "0.8-1.6萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA 高級開發工程師",
  "公司": "匯才保險代理(深圳)有限公司",
  "工作地址": "深圳-羅湖區",
  "薪資水平": "1.5-2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師(直連)",
  "公司": "深圳市天泰國際航空旅行社有限公司...",
  "工作地址": "深圳",
  "薪資水平": "2-4萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA工程師",
  "公司": "深圳市開度貿易有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "0.8-1.2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "后臺開發Leader(JAVA方向)",
  "公司": "深圳金世紀保險經紀有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "3-4萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市中深力人力資源管理有限公司...",
  "工作地址": "深圳-南山區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "研祥高科技控股集團有限公司",
  "工作地址": "深圳-光明新區",
  "薪資水平": "0.9-1.8萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java(證券不加班)",
  "公司": "上海華騰軟件系統有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.8-2.2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "深圳大美商業地產管理有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "1.5-2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "資深/高級Java工程師",
  "公司": "未來穿戴(深圳)有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "3-4萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "深圳市太陽星通信科技有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "0.8-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java高級開發工程師",
  "公司": "深圳市藍鷹立德軟件咨詢有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1.5-1.8萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA(高級、架構)",
  "公司": "深圳市幾米物聯有限公司",
  "工作地址": "深圳-寶安區",
  "薪資水平": "2.2-3.2萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "JAVA開發工程師",
  "公司": "江蘇康尚生物醫療科技有限公司",
  "工作地址": "深圳-寶安區",
  "薪資水平": "1-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "java架構師",
  "公司": "深圳市泓齊網絡科技有限公司",
  "工作地址": "深圳",
  "薪資水平": "1.5-1.8萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "深圳市智璟科技有限公司",
  "工作地址": "深圳-福田區",
  "薪資水平": "0.9-1.5萬/月",
  "發布時間": "06-13"
 },
 {
  "工作名稱": "Java開發工程師",
  "公司": "上海舟恩信息技術有限公司",
  "工作地址": "深圳-南山區",
  "薪資水平": "1.4-1.9萬/月",
  "發布時間": "06-13"
 }
]

進一步思考

本例可以進一步優化的空間,如下所示:

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

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

原文鏈接:https://www.cnblogs.com/hsiang/p/13121404.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲AV无码乱码国产麻豆穿越 | 俄罗斯极品h在线 | 热巴在公交车h文 | 波多野结衣伦理在线观看 | 国产成人免费高清激情明星 | 国产成人性色视频 | 波多野结衣久久国产精品 | 日韩美一区二区三区 | 好姑娘在线视频观看免费 | 阿v天堂2020| 欧美日韩中文国产一区 | 亚洲 欧美 中文 日韩 视频 | 99热成人精品热久久669 | 羞羞视频麻豆 | 国产1广场舞丰满老女偷 | 全色黄大色黄大片爽一次 | 3p文两男一女办公室高h | 久久全国免费观看视频 | 麻豆网站视频国产在线观看 | 欧美日韩中文字幕久久伊人 | 97久久久亚洲综合久久88 | 无套日出白浆在线播放 | 四虎欧美 | 色婷婷在线 | 亚洲 日本 天堂 国产 在线 | 国产日韩综合 | 成年人视频在线免费看 | 日韩一区二区三区四区不卡 | 国产精品美女福利视频免费专区 | 免费xxxxx大片在线观看影视 | 欧美一级高清片免费一级 | 国内精品久久久久影院嫩草 | 国产小视频在线播放 | 日韩成人一级 | 插得爽| 日韩福利一区 | 亚洲 欧美 国产 综合久久 | 日本特级a禁片在线播放 | 二区三区在线观看 | 欧美粗黑巨大gay | 91久|