0112編程-職友集數(shù)據(jù)分析-爬蟲

點(diǎn)擊這里進(jìn)入人工智能嘚吧嘚目錄,觀看全部文章


職友集是一家匯聚全網(wǎng)眾多招聘信息的網(wǎng)站咙冗,并具有很多職位趨勢分析漱挚。

這篇文章介紹如何快速爬取職友集網(wǎng)站的信息俭识。

爬蟲思路分析

首先確認(rèn)需要爬取的職位信息的地址格式是https://www.jobui.com/jobs?jobKw={key_word}&cityKw={city_name}凉倚。

然后確認(rèn)我們所需要的職位詳細(xì)頁面鏈接格式是https://www.jobui.com/job/{job_id}/

我們只需要從職位列表頁面獲取每個職位對應(yīng)的職位詳細(xì)頁面鏈接兼都,即可對獲取到職位詳細(xì)信息。而每個職位的鏈接其實(shí)就是職位列表頁每個職位標(biāo)題的href屬性稽寒。

所以我們把爬蟲分為三步(以10頁為例):

  1. 爬取職位列表頁面的鏈接扮碧,每頁17個,分10頁可以爬取170個鏈接杏糙,最好存儲到文件以備下一步使用慎王。
  2. 從存儲的鏈接文件中一次讀取全部170個鏈接,然后逐個鏈接爬取宏侍,并且將網(wǎng)頁源碼分別存儲為170個文件備用赖淤。
  3. 從存儲的170個職位文件中讀取數(shù)據(jù),這些數(shù)據(jù)都是html源碼谅河,可以用BeautifulSoup解析咱旱。

爬取職位詳情的全部鏈接

習(xí)慣性的在瀏覽器登錄注冊,從控制臺Networks中找到/jobs?...請求并copy request headers獲得請求頭字符串旧蛾,并利用str2dict函數(shù)轉(zhuǎn)為dict對象備用莽龟。

header_str='''
GET /jobs?jobKw=python&cityKw=%E5%85%A8%E5%9B%BD&n=2&taget=subscribe HTTP/1.1
Host: www.jobui.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
...
'''
#字符串轉(zhuǎn)dict的方法
def str2dict(s,s1=';',s2='='):
    li=s.split(s1)
    res={}
    for kv in li:
        li2=kv.split(s2)
        if len(li2)>1:
            res[li2[0]]=li2[1]
    return res
headers=str2dict(header_str,'\n',': ')
headers

這里的headers看起來是這樣的一個dict:


下面是獲取鏈接link的函數(shù)

import requests
from bs4 import BeautifulSoup
urlstr = 'https://www.jobui.com/jobs?jobKw={kw}&cityKw=%E5%85%A8%E5%9B%BD&n={n}'

#n,頁碼锨天,第幾頁;kw剃毒,搜索詞病袄,如'python'
def getLinks(n,kw):
    links = []
    url = urlstr.format(n=n,kw=kw)
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text)    
    jobs = soup.find('ul', {'data-jobidlist': True})
    jobs=jobs.find_all('li')
    for job in jobs:
        atag = job.find('h3', {'data-positionid': True}).parent
        links.append('https://www.jobui.com' + atag['href']) #獲取到鏈接href屬性
    return links

先從大數(shù)據(jù)工程師.json中讀出已有的全部鏈接,放入all_links赘阀,然后再啟動爬蟲爬取新的鏈接也放入all_links益缠,并且去除重復(fù),重新存儲大數(shù)據(jù)工程師.json覆蓋基公,實(shí)現(xiàn)新增鏈接幅慌。

#獲取detail頁面鏈接
import json
import os
import time

kw = '大數(shù)據(jù)工程師'

all_links = []
linkfdr = './jobui/links/'
file = linkfdr + '{}.json'.format(kw)
if not os.path.exists(linkfdr): #如果文件夾不存在就創(chuàng)建它
    os.makedirs(linkfdr)

#先讀取已有的,避免重復(fù)
if os.path.isfile(file):#檢查文件存在
    with open(file, 'r') as f:
        all_links = json.loads(f.read())

#增加新的鏈接
for i in range(0, 10):
    print('Crawling LINK:', i)
    try:
        all_links = all_links + getLinks(i, kw)
        time.sleep(1)
    except:
        print('Get link failed.')

with open(file, 'w') as f:
    all_links = list(set(all_links))  #去重復(fù)
    f.write(json.dumps(all_links))
print('LINK OK!')

這個代碼將在當(dāng)前文件夾的/jobui/link/文件夾中創(chuàng)建一個以kw命名的.json文件轰豆,比如大數(shù)據(jù)工程師.json,其中包含了10個頁面共170個職位鏈接地址胰伍,看起來如下:

爬取并存儲每個職位詳情源碼

根據(jù)鏈接讀取文件并存儲的函數(shù)。

#link,職位頁面的地址,http://...完整地址酸休;keyw骂租,關(guān)鍵詞,將作為存放網(wǎng)頁源碼文件的文件夾名稱斑司。
def getHtml(link, keyw):
    res = requests.get(link, headers=headers)
    fdr = './jobui/{}/'.format(keyw)
    if not os.path.exists(fdr):
        os.makedirs(fdr) #如果不存在文件夾則創(chuàng)建它
    fname = link.split('/')[-2:-1][0] #從https://.../job/194131276/中獲得194131276
    with open(fdr + fname + '.html', 'w',encoding='utf-8') as f:
        f.write(res.text)

大數(shù)據(jù)工程師.json中讀取全部link,為每個link啟動getHtml爬取數(shù)據(jù)并存儲頁面源碼渗饮。

#讀取link文件中所有鏈接的html
read_links = []
keyfdr = kw
link_file = linkfdr + '{}.json'.format(keyfdr)
with open(link_file, 'r') as f:
    links = json.loads(f.read())
    for link in links:
        print('Getting HTML:', link)
        try:
            getHtml(link, keyfdr)
        except:
            print('--failed')
        time.sleep(1)
print('HTML OK!')

最終生成的文件目錄大致是:


注意參考0112編程-windows和mac的python文件讀寫編碼


點(diǎn)擊這里進(jìn)入人工智能DBD嘚吧嘚目錄,觀看全部文章


每個人的智能新時(shí)代

如果您發(fā)現(xiàn)文章錯誤,請不吝留言指正互站;
如果您覺得有用私蕾,請點(diǎn)喜歡;
如果您覺得很有用胡桃,歡迎轉(zhuǎn)載~


END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末是目,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子标捺,更是在濱河造成了極大的恐慌懊纳,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡容,死亡現(xiàn)場離奇詭異嗤疯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闺兢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門茂缚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屋谭,你說我怎么就攤上這事脚囊。” “怎么了桐磁?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵悔耘,是天一觀的道長。 經(jīng)常有香客問我我擂,道長衬以,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任校摩,我火速辦了婚禮看峻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衙吩。我一直安慰自己互妓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布坤塞。 她就那樣靜靜地躺著冯勉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尺锚。 梳的紋絲不亂的頭發(fā)上珠闰,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機(jī)與錄音瘫辩,去河邊找鬼伏嗜。 笑死坛悉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的承绸。 我是一名探鬼主播裸影,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼军熏!你這毒婦竟也來了轩猩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后藕施,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彤委,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了或衡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焦影。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖封断,靈堂內(nèi)的尸體忽然破棺而出斯辰,到底是詐尸還是另有隱情,我是刑警寧澤坡疼,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布彬呻,位于F島的核電站,受9級特大地震影響回梧,放射性物質(zhì)發(fā)生泄漏废岂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一狱意、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拯欧,春花似錦详囤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至该贾,卻和暖如春羔杨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杨蛋。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工兜材, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留理澎,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓曙寡,卻偏偏與公主長得像糠爬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子举庶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361