python爬取網(wǎng)站招聘信息


?
《python程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告》
?
題目
一、?設(shè)計(jì)方案(思路)
爬取網(wǎng)頁(yè)為:https://www.jobui.com/jobs/ ?爬取對(duì)象為:python開(kāi)發(fā)工程師,職位地點(diǎn):廈門。將爬取的結(jié)果存放在excel文件中,存儲(chǔ)信息包括:職位名稱、經(jīng)驗(yàn)、學(xué)歷、薪資
什么叫爬蟲(chóng)呢?
就是使用編程語(yǔ)言所編寫的程序,在互聯(lián)網(wǎng)上模擬器獲取(大量)數(shù)據(jù)
?
瀏覽器工作原理 : 發(fā)請(qǐng)求,得響應(yīng)
爬蟲(chóng)的工作原理:發(fā)請(qǐng)求,得響應(yīng),數(shù)據(jù)的解析,存儲(chǔ)
?
直接使用requests庫(kù),在不設(shè)置任何header的情況下,網(wǎng)站直接不返回?cái)?shù)據(jù)。同一個(gè)ip連續(xù)訪問(wèn)多次,直接封掉ip。
反爬的一種手段---(偽裝成瀏覽器)
?headers= {}
爬取數(shù)據(jù)的步驟
安裝python和python庫(kù)requests、BeautifulSoup、openpyxl
?
1.?找到要爬取的目標(biāo)網(wǎng)站,發(fā)送請(qǐng)求 requests
2.?分析有效的url
3.?提取數(shù)據(jù)有用的數(shù)據(jù)
4.?數(shù)據(jù)的存儲(chǔ)
?
爬蟲(chóng):采集數(shù)據(jù),從網(wǎng)頁(yè)上面爬取到想要的內(nèi)容
?
怎么可以獲取數(shù)據(jù)?
靜態(tài)網(wǎng)頁(yè):打開(kāi)網(wǎng)頁(yè),獲取源碼,從源碼中間提取想要的內(nèi)容
??????動(dòng)態(tài)網(wǎng)頁(yè):找到請(qǐng)求,請(qǐng)求方式
?
?
????????
二、?程序流程圖
?

三、?代碼
?
import requests ???#向服務(wù)器發(fā)送請(qǐng)求的模塊(相當(dāng)于瀏覽)
from bs4 import BeautifulSoup ??#用于解析和提取數(shù)據(jù)
import openpyxl ?#讀寫excel文件
import time
lst=[]
def send_requests(id,page):
????url='https://www.jobui.com/jobs?cityKw=%E5%8E%A6%E9%97%A8&jobKw=python%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B'.format(id,page) ?#相當(dāng)于瀏覽器的地址欄
????#用于反爬的一種手段―(偽裝成瀏覽器)
????headers= {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
????resp=requests.get(url,headers=headers) ??#相當(dāng)于在瀏覽器的地址欄中輸入網(wǎng)址之后回車的過(guò)程
????return resp.text
def parse_html(html): ??#html代表是從服務(wù)器端響應(yīng)回來(lái)的數(shù)據(jù)(內(nèi)容)
????bs=BeautifulSoup(html,'html.parser') ???#得到BeautifulSoup的對(duì)象
????job_lst=bs.find_all('div',class_='c-job-list') ???#得到包含職位的div,--》15
????for item in job_lst: ????#分別遍歷每一個(gè)職位數(shù)據(jù)每個(gè)item就是一個(gè)c-job-lst
????????name=item.find('h3').text ?#職位名稱
????????div_tag=item.find('div',class_='job-desc')
????????span_tag=div_tag.find_all('span')
????????url=item.find('a',class_='job-name')['href'] ??#提取class樣式為job-name的a標(biāo)簽,獲取屬性為href的值
????????lst.append([name,span_tag[0].text,span_tag[1].text,span_tag[2].text])
????#存儲(chǔ)
def save(lst):
????????wk=openpyxl.Workbook() ?#打開(kāi)工作蒲
????????sheet=wk.active ??#活動(dòng)頁(yè)(凹下去的sheet)
????????#遍歷列表
????????for item in lst:
????????????sheet.append(item)
????????????#保存文件
????????????wk.save('招聘信息.xlsx')
#啟動(dòng)爬蟲(chóng)程序
def start(id,pages):
????for page in range(1,pages+1) :
????????resp_data=send_requests(id,page) #發(fā)送請(qǐng)求
????????parse_html(resp_data)
????????time.sleep(2)
????save(lst)
if __name__ == '__main__':
?????????pages=3
?????????start(id,pages)
?
四、?結(jié)果分析
?

?
五、?總結(jié)
大家找工作都是通過(guò)各種招聘app,信息全部羅列出來(lái),可是招聘信息有一些是錯(cuò)綜復(fù)雜的。而且不能把全部的信息全部羅列出來(lái),這樣也讓人很苦惱,所以今天我們就通過(guò)爬蟲(chóng)技術(shù),為大家解決這個(gè)問(wèn)題。首先我們的爬取目標(biāo)是獲取招聘信息,并批量把職位名稱、經(jīng)驗(yàn)、工資 、學(xué)歷等詳細(xì)資料做成excel。這里我們爬取網(wǎng)頁(yè)為:https://www.jobui.com/jobs/為例。在獲取數(shù)據(jù)之前簡(jiǎn)單的對(duì)網(wǎng)站進(jìn)行了分析,和對(duì)該網(wǎng)站上的反爬等操作。
?


?
?
?
?
?