畢業將近,大部分學生面臨找工作的壓力,如何快速的找到自己心儀的崗位並且及時投遞簡歷成為同學們關心的問題,我們設計和實現一個爬取boss直聘,招聘網站招聘信息的爬蟲。功能有:對boss直聘網站招聘信息詳情進行爬取,對爬取出的詳情數據進行存儲,將其儲存到csv表格中,以及數據分析與數據展示。我在本項目中擔任了數據爬取與數據存儲模塊。
--對boss直聘網站招聘信息詳情進行爬取,對爬取出的詳情數據進行存儲。這部分包括搜索想要爬取的工作崗位:
(1)打開指定瀏覽器、打開制定城市的boss直聘網站、找到搜索框、輸入搜索內容、找到搜索按鈕、點擊搜索。
jobName = 'Java'
cityName = 'chengdu'
url = f'https://www.zhipin.com/{cityName}/'
def main():
web = webdriver.Edge()#選擇瀏覽器
web.get(url) # 打開獲取url
searchEle = web.find_element(By.CLASS_NAME, 'ipt-search') # 找到輸入框
searchEle.send_keys(jobName) # 輸入框中填上工作名稱
btnSearch = web.find_element(By.CSS_SELECTOR, 'button.btn.btn-search')
btnSearch.click() # 模擬點擊搜索按鈕
(2)獲取頁面內容:獲取彈出第一頁頁面內容、點擊崗位詳情、打印數據 將字符串轉為數組儲存到csv中,進行點擊下一頁。
pageS = 1
while pageS < 100: # page循環
def getOnePage(web, writer):#獲取一頁內容並寫入表格
jobInfos = web.find_elements_by_class_name('job-primary') # 模擬點擊崗位詳情
for info in jobInfos: # 迭代取出數據
print(info.text) # 打印崗位詳情
strText = info.text
arrTxt = strText.split("\n")
tmp = arrTxt[2].split("-") # 將字符串變成數組
arrTxt.insert(2, tmp[0])
writer.writerow(arrTxt) # 將數組寫入表格
(3)創建新的csv表格進行數據存儲:創建csv表格、寫入表頭數據、調用getonepage中的數據。
headerRow = [
'崗位名稱',
'工作地點',
'起薪',
'薪資區間',
'學歷要求',
'聯系人',
'公司名稱',
'業務范圍',
'崗位職責',
'福利待遇',
]
def tableCreater():##創建新的csv表格
with open(fileName, 'a', encoding='utf-8-sig', newline='') as csvfile:
csv_writer = csv.DictWriter(csvfile, fieldnames=headerRow)
csv_writer.writeheader() # 寫入表頭數據
def getOnePage(web, writer):#獲取一頁內容並寫入表格
三、 數據分析與展示
我們可以通過數據分析清晰的了解到問題發生的原因,整體情況,幫助我們做出合理的規划。
1、首先進行數據清洗
#數據清洗
import pandas as pd
from bar import Bar
content = pd.read_csv(r'D:\PythonWorks\jobwzw\招聘數據.csv', encoding='utf-8')
welfare = content['福利待遇']
welfare_1 = welfare[welfare.notnull()]
welfare_count = pd.value_counts(welfare_1)
#學歷要求
content = pd.read_csv(r'D:\PythonWorks\jobwzw\招聘數據.csv', encoding='utf-8')
educational_background = content['學歷要求']
educational_background_1 = educational_background[educational_background.notnull()]
educational_background_count = pd.value_counts(educational_background_1).head()
print(educational_background_count)
bar=Bar
bar.add_xaxis(educational_background_count.index.tolist())
bar.add_yaxis("學歷要求", educational_background_count.values.tolist())
bar.render('bar.html')

2、將學歷要求 以柱狀圖展示出來
import matplotlib.pyplot as plt
import numpy as np
# 創建一個點數為 8 x 6 的窗口, 並設置分辨率為 80像素/每英寸
plt.figure(figsize=(8, 6), dpi=80)
# 再創建一個規格為 1 x 1 的子圖
plt.subplot(1, 1, 1)
# 柱子總數
N = 6
# 包含每個柱子對應值的序列
values = (1638,860,756,664,654,582)
# 包含每個柱子下標的序列
index = np.arange(N)#(0,1,2,3,4,5)分別代表3-5年大專、1-3年大專 、5天/周4個月本科 、5-10年本科 、5-10年大專 ,本科總和
# 柱子的寬度
width = 0.35
# 繪制柱狀圖, 每根柱子的顏色為紫羅蘭色
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽
p2 = plt.bar(index, values, width, label="學歷要求", color="#87CEFA")
# 設置橫軸標簽
plt.xlabel('學歷要求')
# 設置縱軸標簽
plt.ylabel('頻數')
# 添加標題
plt.title('各學歷對應的頻數柱狀圖')
# 添加縱橫軸的刻度
plt.yticks(np.arange(0, 1800, 300))
# 添加圖例
plt.legend(loc="upper right")
plt.show()

3、生成詞雲圖
import numpy as np
import csv
# 取第4列
wind_sky_list = []
filename = '招聘數據.csv'
with open(filename, 'r', encoding='UTF-8') as f:
reader = csv.reader(f)
header_row = next(reader)
column1 = [row[4] for row in reader]
wind_sky_list.append(column1)
print(np.shape(wind_sky_list))
print(wind_sky_list)
# 轉為txt文件
def text_save(filename, data): # filename為寫入txt文件的路徑,data為要寫入數據列表.
file = open(filename, 'a')
for i in range(len(data)):
s = str(data[i])
s = s.replace("'",' ').replace(',',' ').replace('[',' ').replace(']',' ')+'\n' # 去除單引號,逗號,每行末尾追加換行符
file.write(s)
file.close()
text_save('wind_sky_list5.txt', wind_sky_list)
# 正式開始畫詞雲圖
from wordcloud import WordCloud
import PIL.Image as image
import jieba
import numpy as np
def trans_cn(text):
word_list = jieba.cut(text)
result = " ".join(word_list)
return result;
with open("wind_sky_list5.txt") as fp:
text = fp.read()
text = trans_cn(text)
print(text)
# 選了一張背景圖片
mask = np.array(image.open("ciyun.png"))
WordCloud = WordCloud(
# 背景圖片
mask=mask,
# txt里面有中文的話一定要加這一行代碼,不然出來的圖會是空的框框!!!
font_path="C:\\Windows\\Fonts\\msyh.ttc"
).generate(text)
image_produce = WordCloud.to_image()
image_produce.show()

4、總結分析:
在對數據爬取的代碼編寫前進行了html的學習 了解了網站是如何建立起來的;
在做數據分析前期進行了爬蟲及數據分析的一些學習,在做數據分析過程中,遇到了許多問題,
比如,函數不是很清楚,寫出來的代碼老是報錯,改了很長時間,請教了別人許多問題,收獲頗多!
