(轉)python爬蟲例項——爬取智聯招聘資訊
阿新 • • 發佈:2018-12-19
受友人所託,寫了一個爬取智聯招聘資訊的爬蟲,與大家分享。 本文將介紹如何實現該爬蟲。
目錄
網頁分析
網頁的組織結構如下:
將網頁程式碼儲存為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程式碼地址
以上就是全部內容了,有問題歡迎留言指正!大家共同進步~