最近有想換工做的想法,因而習慣性的去了XXX網站看有沒有合適的職位,輸入幾個條件後,便開始了對海量的數據進行一頁一頁的瀏覽,不知不覺也就走了神........python
做爲程序員怎麼能夠這樣找工做了?因而想寫個程序來作這個無聊而重複的賽選工做,最近在研究Python,真好又從書上看到了有個叫"網絡爬蟲"的概念,原本覺得這是個複雜的技術,沒想到區區幾行幾代便揭開了這隻"爬蟲"的面紗,因而針對這個網站試着寫一個"爬蟲".程序員
通過三天晚上的加班,終於大功告成,運行程序兩分鐘左右4萬多個職位已經所有保存到我本地的文件中.網絡
目前只是簡單的版本,只能根據你輸入的條件獲取到全部結果中的"職位名稱"以及"公司名稱",若是想要進行擴展,例如展現出"職位的技能要求,待遇"等能夠在已有功能的基礎上進行擴展.下面是源碼以及思路.(考慮到執行該爬蟲可能會對該網站的性能有必定的影響,因此程序中沒有給出該網站的真實信息,若是您猜出了該網站的真實信息,也請不要在本博客中公佈,不然一切後果自負,謝謝合做)性能
import urllib.request import re PAGE_NUMBER = 1 def filter_job(url): #Python 3.X 必須用 urllib.request打開一個URL text = urllib.request.urlopen(url).read().decode("gbk") page_navi(text) def page_navi(page_source): #第一頁直接獲取信息 extract_job_info(page_source) #"下一頁"連接的正則 next_page_regular = r'</td><td><a href=(.*?)class="orange1".+?style=.*?>(.*?)<img .*?pageron.gif.*? />.*?</a></td></tr>' next_pagelink_set = re.findall(next_page_regular, page_source) if len(next_pagelink_set) > 0: #若是須要更改全局變量,則須要先用global來聲明 global PAGE_NUMBER PAGE_NUMBER = PAGE_NUMBER + 1 print("*****************************"+str(PAGE_NUMBER)+"******************************") next_url = next_pagelink_set[0][0].split('"')[1] #解析出"下一頁"按鈕對應的連接,而後遞歸調用 filter_51job(next_url) def extract_job_info(page_source): #職位名稱的正則 job_name_reqular = r'<a .*? class="jobname" .*>(.*?)</a>' #公司名稱的正則 com_name_reqular = r'<a .*? class="coname" .*>(.*?)</a>' job_name_set = re.findall(job_name_reqular, page_source) com_name_set = re.findall(com_name_reqular, page_source) #使用zip()對結果進行展現 for job_name, com_name in zip(job_name_set, com_name_set): print("Job Name:" + job_name + " "*5 + " Company Name:" + com_name) if __name__ == "__main__": #輸入必定條件後,結構列表的首頁URL,只要輸入這個做爲條件 url = '''http://XXXXX.XXXXXXX.com/list/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX''' filter_job(url)
以上代碼只是列出的基本的信息,若是有什麼好的建議,或者是改進的地方,歡迎指出 網站