python-爬取104人力銀行的職缺訊息

python-爬取104人力銀行的職缺訊息
PYTHON

python-爬取104人力銀行的職缺訊息

(一).印出職缺內容

首先先以Google Chrome連到104人力銀行網站,隨意搜尋關鍵字,我先舉搜尋'Python'為例子。
接著網頁會加載搜尋到有關Python的職缺,按下F12進入開發者模式。

對著各個職缺名稱點選右鍵->檢查,會跳出該職缺內容的路徑。

我們知道,所有職缺的子標籤都是在<div id="js-job-content">的標籤裡,而每個子標籤都叫做<article class="js-job-item">,這些資訊即可爬取個職缺內容囉。

我只想要知道各個職缺名稱、公司名稱、地址、薪資、網址。
職缺名稱在data-job-name裡 ,也在<a>標籤的class"js-job-link"裡
公司名稱在data-cust-name裡
地址在<ul>標籤的class="job-list-intro"的<li>標籤裡
薪資在<span>標籤的class="b-tag--default:裡
網址在<a>標籤的href裡

程式碼如下:

#印出各個職缺內容
import requests
import bs4

url = 'https://www.104.com.tw/jobs/search/?keyword=python&order=1&jobsource=2018indexpoc&ro=0'
htmlFile = requests.get(url)
ObjSoup=bs4.BeautifulSoup(htmlFile.text,'lxml')
jobs = ObjSoup.find_all('article',class_='js-job-item')             #搜尋所有職缺

for job in jobs:
    print(job.find('a',class_="js-job-link").text)                  #職缺內容
    print(job.get('data-cust-name'))                                #公司名稱
    print(job.find('ul', class_='job-list-intro').find('li').text)  #地址
    print(job.find('span',class_='b-tag--default').text)            #薪資
    print(job.find('a').get('href'))                                #網址
    print('='*70)

執行結果:

(二)資料存取,將爬取資料存成csv檔

光是印出職缺內容還不夠,我希望能存成CSV格式,使用EXCEL來搜尋比較方便。
這裡我使用CSV方式來做資料存取的動作。
程式碼如下:

#將各個職缺內容存到csv檔
import requests
import bs4
import csv
url = 'https://www.104.com.tw/jobs/search/?keyword=python&order=1&jobsource=2018indexpoc&ro=0'
htmlFile = requests.get(url)
ObjSoup=bs4.BeautifulSoup(htmlFile.text,'lxml')
jobs = ObjSoup.find_all('article',class_='js-job-item')                     #搜尋所有職缺

fn='104人力銀行職缺內容.csv'                                                 #取CSV檔名
columns_name=['職缺內容','公司名稱','地址','薪資','網址']                     #第一欄的名稱
with open(fn,'w',newline='',) as csvFile:                                   #定義CSV的寫入檔,並且每次寫入完會換下一行
    dictWriter = csv.DictWriter(csvFile,fieldnames=columns_name)            #定義寫入器
    dictWriter.writeheader()
    
    for job in jobs:
        job_name=job.find('a',class_="js-job-link").text                    #職缺內容
        job_company=job.get('data-cust-name')                               #公司名稱
        job_loc=job.find('ul', class_='job-list-intro').find('li').text     #地址
        job_pay=job.find('span',class_='b-tag--default').text               #薪資
        job_url=job.find('a').get('href')                                   #網址
        
        dictWriter.writerow({'職缺內容':job_name,'公司名稱':job_company,
                            '地址':job_loc,'薪資':job_pay,'網址':job_url})

執行結果:
會跑出一個104人力銀行職缺內容.csv檔案

這樣子我們就完成資料的存取囉!

(三)連續爬取多頁,並存成CSV檔

讀者可能會發現,明明還有好幾頁,為什麼只存第一頁的職缺資料而已。
當你試著在網站上往下滾輪到底,網站會自動載入第二頁的職缺內容,這是使用了Ajax的加載技術。觀察網址發現,網址會自動變成含有page=2,所以我們知道,如果要爬取下一頁的資訊,只需要把這個跑出來的網址宣告給url參數就好了。
因為會大量搜尋網站上的資料,故每一次換頁時需加上等待時間time.sleep()較佳。
現在筆者試著把取前5頁的職缺資訊
程式碼如下:

#爬取5頁的職缺內容,將各個職缺內容存到csv檔
import requests
import bs4
import csv
import random,time
url_A ='https://www.104.com.tw/jobs/search/?ro=0&kwop=7&keyword=python&order=15&asc=0&page='
url_B = '&mode=s&jobsource=2018indexpoc'

all_job_datas=[]
for page in range(1,5+1):
    url = url_A+str(page)+url_B
    print(url)
    htmlFile = requests.get(url)
    ObjSoup=bs4.BeautifulSoup(htmlFile.text,'lxml')
    jobs = ObjSoup.find_all('article',class_='js-job-item')                 #搜尋所有職缺  
       
    for job in jobs:
        job_name=job.find('a',class_="js-job-link").text                    #職缺內容
        job_company=job.get('data-cust-name')                               #公司名稱
        job_loc=job.find('ul', class_='job-list-intro').find('li').text     #地址
        job_pay=job.find('span',class_='b-tag--default').text               #薪資
        job_url=job.find('a').get('href')                                   #網址
        job_data={'職缺內容':job_name,'公司名稱':job_company,
                         '地址':job_loc,'薪資':job_pay,'網址':job_url}
        all_job_datas.append(job_data)
    time.sleep(random.randint(1,3))


fn='104人力銀行職缺內容共5頁.csv'                                             #取CSV檔名
columns_name=['職缺內容','公司名稱','地址','薪資','網址']                     #第一欄的名稱
with open(fn,'w',newline='') as csvFile:               #定義CSV的寫入檔,並且每次寫入完會換下一行
    dictWriter = csv.DictWriter(csvFile,fieldnames=columns_name)            #定義寫入器
    dictWriter.writeheader()       
    for data in all_job_datas:
        dictWriter.writerow(data)

Read more

讀書心得-Read Write Own:開啟WEB3新局的區塊鏈網路

讀書心得-Read Write Own:開啟WEB3新局的區塊鏈網路

本書清楚的說明網路及區塊鏈的歷史以及區塊鏈的優點,以及抨擊那些獨佔網路生態的大型企業,對於不熟悉區塊鏈的新手,是個很好的入門書,理解到區塊鏈的迷人之處。 協定網路與區塊鏈網路 協定網路是一個大家講好的「規則」,是由中心化機構維持運作,例如「網際網路協定 TCP/IP」、「網站瀏覽協定HTTP」多半是由領少量的捐款或是志工來維持經營,所以要維持運作的話通常比較困難。 作者說明有個強化協定網路運作的方法,「區塊鏈網路」 區塊鏈網路採取「分散式帳本及共識帳本」、「代幣獎勵」、「不可竄改」、「去中心化」等方式來維持運作,例如:想要做交易,將交易需求發送各個節點,讓他們簽屬通過,好處是,發起交易者的手續費是直接交由共同簽屬的節點(礦工)。 這種運作方式聽起來好像沒甚麼特別的,但卻是非常「去中心化」的方式,也就是說,是經由多數人的檢查及驗證同意,意即要竄改內容是無法完成交易的,也因此區塊鏈網路是本質上透明、不可以修改的運作方式。 企業網路 網路初期,還沒有任何一家公司把網路社群一把抓住。 在我有印象的早期是使用撥接網路,接著可以上到Yahoo搜尋一些網路資料,接著開始出現了聊天

By 落葉
讀書心得-耕股

讀書心得-耕股

耕股主要是講基本面取向的投資用書,閱讀搭配作者建立的股票研究網站,比較不沉悶。 週期循環指標 依照作者經驗,當我們可以從以下六點來看出目前股市處在哪個階段: 1.巴菲特指標(台股&美股) 依照作者整理,當台股巴菲特指標超過180%時隨即會發生市場修正,在1990年中東危機、2008年金融海嘯、2020年美中貿易戰也都是超過180%,並且發生了修正。 但聰明的讀者會發現,從2020年過後直到今日,巴菲特指標都超過180%,最高已達到333%(25年10月底),為何持續5年都沒發生過大修正? 我個人解讀是,投資者對於風險容忍度提高了,既使巴菲特指數已嚴重超過標準值180%,但仍毫無畏懼的持續投資。 不過我也認為經濟泡沫或許比以往歷史吹的還大,等到泡沫爆開時,可能會跌得非常慘。 2.台灣百大優質企業累計營收年增率趨勢 是作者自創的指標,觀察台灣百大企業營收年增率、3個月營收成長率的走勢關係,當3個月營收成長率向上穿過營收年增率表示景氣不錯(黃金交叉),當3個月營收成長率向下穿過年增率表示景氣有衰退現象(死亡交叉)。 景氣非常好應該是3個月營收率持續都在往上增加,年收成長

By 落葉
讀書心得-我可能錯了

讀書心得-我可能錯了

本書時作者比約恩是個瑞典人,主要講述他前往泰國當森林僧人的十七年來學到的對人生的體悟。 我有著念頭,可是我的念頭不代表我 這句話非常有魔力:「我有著念頭,可是我的念頭不代表我。」 當我們在低潮時,有時會有些負面想法。 而這些負面想法,如果久了又多了,真的對我們心理造成很大的傷害。 這句話可以讓自己站在客觀的角度觀察想法,觀察這個與我無關的想法。我把他解讀為「雜訊」,這只是腦中的一段雜訊,左耳進、右耳出了。 書中提到:「如何放下拖累你的一連串念頭呢?--你需要將注意力轉移到別處。這些念頭唯一的養分來源,就是你的注意力。」 這句話很棒,因為當處在低潮時,很容易一直陷入在負面想法的循環中,那我們可以做的事情就是「轉移注意力」,停止沒必要的負面想法。 書中又提到:「所有人都有能力放下自己的念頭,以及選擇將注意力擺在哪裡,並決定讓注意力在對自己無助益的事情上停留多長的時間。」 像一個有如「兔子」般的人敞開心扉 這也是體驗當下的方式。 有時聽朋友說些自己以為聽過的事情,就變得漫不經心,或是接話,其實這對演講者很不尊重。 我們應時時保持謙遜、保持好奇心,放下成見的仔細聆聽

By 落葉
讀書心得-隱性潛能

讀書心得-隱性潛能

本書主要是講學習法和自我成長的心法,每一章節會先講故事,接著引導到自述的論點,讀起來非常順,且又不無聊。 有時候,你可能會覺得學習某些技能很不順利,總是卡卡的,或是好像學不怎麼深刻,過一陣子好像又忘個精光。 以下是我讀到比較令我印象深刻的學技能心法。 盡量犯錯(享受不適感) 書中舉學習語言當例子。 比如我們在學習英文,我們很害怕自己講錯話,用錯單字、文法,使得對方覺得我們好像英文很差,然後被嘲笑。 不過其實我們應該要"擁抱尷尬"才對,想想還在嬰兒時期的我們,我們不是也都牙牙學語嗎? 換個角度想,如果有個學中文的外國人,他試著用中文跟你溝通,他不小心說錯字時,是不是已經覺得他很厲害了?我們不會放大他的錯誤,而是為他"因為努力說我們的語言而感到開心",是個很有勇氣的人,對吧! 說錯被糾正,使得我們記住這個字該如何說、這個情況要怎麼回答,這才是學習語言的方式。 我們也應該每天累積犯錯機會,多講就會成長、講錯就改進。 不完美主義 完美主義也是會拖累我們學習的進度。 完美主義者害怕犯錯、給予太多假設、

By 落葉