1. 程式人生 > >(轉)python爬蟲例項——爬取智聯招聘資訊

(轉)python爬蟲例項——爬取智聯招聘資訊

受友人所託,寫了一個爬取智聯招聘資訊的爬蟲,與大家分享。 本文將介紹如何實現該爬蟲。

目錄

網頁分析

網頁的組織結構如下:

這裡寫圖片描述

將網頁程式碼儲存為html檔案(檔案見最後連結),使用的軟體是Sublime Text,我們所需的內容如下圖所示:

這裡寫圖片描述

那麼我們需要爬取的內容包括(以上圖為例):

  • 職位詳細介紹的url:xiaoyuan.zhaopin.com/job/CC000920419J9000072500
  • 職位名稱:C/C++
  • 公司名稱:中國行動通訊有限公司-中國移動線上服務有限公司
  • 釋出時間:19小時前
  • 職責描述:1、負責影象識別演算法開發、優化和硬體驅動開發除錯工作;2、根據演算法工程師研發結果進行底層演算法模型編寫、優化和API介面開發工作;3、配合硬體工程師進行硬體介面驅動開發、除錯和優化工作;……

實現程式碼分析

# -*- coding:utf-8 -*-
import urllib.request
import urllib.parse
import re
#用來建立excel文件並寫入資料
import xlwt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 匯入庫,xlwt是將資料寫入excel時需要用到的庫
#獲取網頁的原始碼
def get_content():
    #網址
    url = 'https://xiaoyuan.zhaopin.com/full/538/0_0_160000_1_0_0_0_1_0'
    #開啟網址
    a = urllib.request.urlopen(url)
    #讀取原始碼並轉為unicode
html = a.read().decode('utf-8') return html
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 可以根據需要將url換成自己需要的網址
#正則匹配要爬取的內容
def get(html):
    #正則匹配式
    reg = re.compile(r'class="searchResultJobName">.*?<a joburl href="//(.*?)" class="fl __ga__fullResultcampuspostname_clicksfullresultcampuspostnames_001">(.*?)</a>.*?<p class="searchResultCompanyname"><span>(.*?)</span>.*?<span>釋出時間:<em>(.*?)</em></span>.*?職責描述:<span>(.*?)</span>'
,re.S) #進行匹配 items = re.findall(reg,html) #print(items) #計算匹配到的數目(一整條記錄算一個) items_length = len(items) return items,items_length
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 正則匹配式不能忽略注意換行符和空格,.*?代替任意長的字元,如果正則匹配式寫錯了,程式不會報錯,但匹配結果會為空。
  • 正則匹配式的書寫要以在於用(.*?)代替要爬取的內容,前後要有標誌性的class,這樣才能夠匹配到正確的內容。
#爬取到的內容寫入excel表格
def excel_write(items,index):
    #將職位資訊寫入excel,item為tuple元組
    for item in items:
        #共五個資訊,寫五列
        for i in range(0,5):
            #print item[i]
            #.write(行,列,資料)
            ws.write(index,i,item[i])
        #每成功寫入一條就輸出對應的行編號
        print(index)
        #index+1,寫下一行
        index+=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 若懷疑正則匹配寫錯了,可以通過輸出items(這是所有爬取的資訊)來查錯。
  • 新手建議一個個匹配,匹配成功一個,再把正則匹配式拓展,寫下一個匹配,這樣容易查出匹配式的差錯(方便除錯)
#excel名稱
newTable="智聯招聘崗位爬蟲結果.xls"
#建立excel檔案,宣告編碼為utf-8
wb = xlwt.Workbook(encoding='utf-8')
#建立表格
ws = wb.add_sheet('sheet1')
#表頭資訊
headData = ['url','職位','公司','釋出時間','職責描述']
#寫入表頭資訊
for colnum in range(0, 5):
    ws.write(0, colnum, headData[colnum], xlwt.easyxf('font: bold on'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 儲存結果,excel名字可以自己改,表頭資訊是按照爬取資訊的順序排列的
#從第2行開始寫入
index = 1
#爬取資訊
items,items_length = get(get_content())
#寫入excel
excel_write(items,index)
#儲存excel
wb.save(newTable)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 這是主程式

結果

這裡寫圖片描述 這就是執行該程式後儲存的excel檔案,可見內容都正確的爬取了下來。

總結

github程式碼地址

以上就是全部內容了,有問題歡迎留言指正!大家共同進步~