1 scrapy startproject tencent
1 scrapy genspider hr "tencent.com"
命令執行完,用Python最好的IDE---pycharm打開該文件目錄,會在你的當前目錄建立以下文件目錄。php
1 class TencentItem(scrapy.Item): 2 # define the fields for your item here like: 3 # 職位 4 position = scrapy.Field() 5 # 職位類型 6 position_type = scrapy.Field() 7 # 招聘人數 8 persons = scrapy.Field() 9 # 工做地點 10 place = scrapy.Field() 11 # 招聘發佈時間 12 time = scrapy.Field() 13 # 職位詳細連接 14 detail_link = scrapy.Field() 15 # 工做職責 16 work_duty = scrapy.Field() 17 # 工做要求 18 work_request = scrapy.Field()
1 # -*- coding: utf-8 -*- 2 import scrapy 3 import re 4 from items import TencentItem 5 6 class HrSpider(scrapy.Spider): 7 name = 'hr' 8 allowed_domains = ['tencent.com'] 9 offset = 0 10 original_url = 'https://hr.tencent.com/position.php?keywords=&tid=0&start=' 11 # 設置動態起始url 12 start_urls = ['https://hr.tencent.com/position.php?keywords=&tid=0&start=' + str(offset)] 13 14 def parse(self, response): 15 # 編寫xpath規則提取須要的數據,進行數據清洗。 16 trs = response.xpath("//table[@class='tablelist']//tr")[1:-1] 17 for tr in trs: 18 item = TencentItem() 19 item["position"] = tr.xpath("./td[1]/a/text()").extract() 20 item["position_type"] = tr.xpath("./td[2]/text()").extract() 21 item["persons"] = tr.xpath("./td[3]/text()").extract() 22 item["place"] = tr.xpath("./td[4]/text()").extract() 23 item["time"] = tr.xpath("./td[5]/text()").extract() 24 link_part = tr.xpath("./td[1]/a/@href").extract_first() 25 # 分析網址結構,拼接正確的職位詳細連接 26 url_detail = item["detail_link"] = 'https://hr.tencent.com/' + link_part 27 # 將找到的詳細連接yield 到scrapy的調度器,調度器進行入隊列,依次發送請求。 28 yield scrapy.Request(url=url_detail, 29 callback=self.parse_next_url,#編寫處理連接的回調函數 30 meta = {"item":item}, 31 ) 32 # 進行翻頁操做 33 if self.offset < 2870: 34 self.offset += 10 35 url_send = self.original_url + str(self.offset) 36 yield scrapy.Request( 37 url=url_send, 38 callback=self.parse, 39 ) 40 # 編寫回調函數 41 def parse_next_url(self,response): 42 item = response.meta["item"] 43 item["work_duty"] = response.xpath("//table[@class='tablelist textl']//tr[3]//ul//text()").extract() 44 item["work_request"] = response.xpath("//table[@class='tablelist textl']//tr[4]//ul//text()").extract() 45 item["work_duty"] = re.sub(r'(\xa0)','',str(item["work_duty"])) 46 item["work_request"] = re.sub(r'(\xa0)','',str(item["work_request"])) 47 yield item
1 import json 2 3 4 class TencentPipeline(object): 5 # 自定義一個打開文件,寫入文件的方式存儲數據 6 def __init__(self): 7 self.f = open("tencent.json","wb") 8 9 def process_item(self, item, spider): 10 # 當item文件中有中文時,ensure默認是用ascii編碼中文 11 content = json.dumps(dict(item),ensure_ascii= False) + ", \n" 12 self.f.write(content.encode("utf-8")) 13 return item 14 15 def close_file(self): 16 self.f.close()
六、設置setting.py文件,配置scrapy運行的相關內容前端
DOWNLOADER_MIDDLEWARES = { 'tencent.middlewares.RandomUA': 543, } ITEM_PIPELINES = { 'tencent.pipelines.TencentPipeline': 300, # 'scrapy_redis.pipelines.RedisPipeline': 400, } USER_AGENT = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ]
# 設置請求延時操做
DOWNLOAD_DELAY = 1
七、設置middlewares.py文件,對請求進行處理。vue
class RandomUA(object): # 設置隨機請求頭 def process_request(self,request,spider): UA = random.choice(USER_AGENT) request.headers["user-agent"] = UA
八、設置爬蟲的啓動文件start.pynode
1 from scrapy.cmdline import execute 2 execute("scrapy crawl hr".split())
九、執行效果以下。(保存爲json數據格式的字符串到本地)python
1 {"position": ["25928-高級圖形開發工程師(深圳總部)"], "position_type": ["技術類"], "persons": ["3"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46479&keywords=&tid=0&lid=0", "work_duty": "['負責遊戲引擎圖形相關特性的開發;', '負責渲染流程和算法的優化,以及相關工具的開發;', '負責圖形兼容性分析以及疑難問題的分析定位工做。']", "work_request": "['本科以上學歷,精通C/C++,具有紮實的數據結構和算法基礎,熟悉經常使用設計模式;', '具有計算機圖形學知識,熟練掌握3D圖形渲染技術,熟悉OpenGL以及Shader開發;', '熟練掌握3D遊戲引擎架構, 熟悉3D引擎的接口和遊戲製做流程;', '3年以上3D引擎(Unreal、Unity等)開發經驗,一年以上渲染相關開發和優化經驗;', '深入理解客戶端框架和其餘核心模塊的實現,有主導過核心模塊的開發經驗者優先;', '熟悉移動端GPU/CPU架構,有移動端渲染開發經驗者優先;', '責任心強,善於溝通,對遊戲前沿技術應用抱有熱情。']"}, 2 {"position": ["25667-渠道銷售經理(深圳)"], "position_type": ["市場類"], "persons": ["2"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46485&keywords=&tid=0&lid=0", "work_duty": "['擔任騰訊雲渠道經理,負責區域渠道體系建設及產品銷售;', '按期拜訪渠道合做夥伴,充分了解客戶需求並積極跟進,制定合理方案,負責方案提示、談判,追蹤公司相關部門的工做,保證方案的有效實施;', '維持與現有合做夥伴的良好業務關係,及時更新公司產品信息,傳達企業及品牌文化。']", "work_request": "['本科及以上學歷,計算機、電信、市場營銷或其它相關專業;', '軟件或互聯網行業五年以上相關工做經驗;', '具備豐富的渠道銷售、區域管理及長尾中小企業客戶覆蓋經驗;', '具備企業級應用軟件銷售經驗,具備雲計算及互聯網行業渠道銷售經驗優先;', '可以有效經過渠道覆蓋中長尾客戶,承擔區域銷售業績;', '可以創建區域渠道體系,有效處理渠道衝突與風險防範;', '可以主導制定各類服務與激勵方式,持續提升渠道合做夥伴的滿意度;', '具備出色的協調能力,良好的團隊合做精神;爲人誠信,工做敬業,有責任心。']"}, 3 {"position": ["28481-醫療健康UI開發工程師(深圳)"], "position_type": ["設計類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46476&keywords=&tid=0&lid=0", "work_duty": "['負責騰訊覓影,智慧醫院等相關醫療產品的前端組件的編寫,web開發工做;', '根據產品與設計要求,不斷優化前端架構,改善用戶體驗。參與相關UI組件體系的創建、維護等。']", "work_request": "['網頁重構或web前端開發工做2年以上; ', '精通HTML5,CSS3,JavaScript構建高性能web應用;掌握React或Vue並有相關實戰經驗,掌握主流前端構建工具grunt,gulp,webpack;', '精通UI組件化開發、動效開發、響應式、多終端適配、無障礙有必定開發經驗;', '有node.js/vue/react開發經驗者優先,有前端性能、工具研發方面的實踐經驗優先。', '對Web性能、安全相關有必定的瞭解; ', '有創新精神並能積極學習業界新技術,順暢的溝通合做能力。']"}, 4 {"position": ["SA-騰訊社交廣告高級系統測試工程師(研發中心 北京)"], "position_type": ["技術類"], "persons": ["1"], "place": ["北京"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46486&keywords=&tid=0&lid=0", "work_duty": "['參與互聯網軟件產品測試的全流程,包括參與需求分析、設計評審,制定測試計劃,設計和執行測試用例,進行缺陷跟蹤和軟件質量分析等;', '制定測試計劃,構建測試環境,執行集成測試,迴歸測試等; ', '保證被測系統的質量,並經過測試流程和方法創新,努力提高研發的質量和效率。']", "work_request": "['工科、計算機或其餘相關專業本科以上學歷;', '熟悉C/C++/Java等至少一種編程語言,有Shell或Ruby/PHP/Perl/Python等使用經驗者優先;', '至少1年以上軟件開發、自動化測試工做經驗;', '有性能、安全、白盒測試等專業測試領域經驗者優先;', '具有互聯網廣告、搜索、大數據處理、分佈式系統、數據庫和網絡等業務領域測試經驗者優先; ', '熟悉Linux或Unix操做系統;', '精通測試流程和測試用例設計方法,能主動進行技術鑽研;', '解決複雜問題和編寫自動測試工具和系統的能力;', '很強的邏輯思惟能力,談判的能力和衝突管理的能力;', '善於團隊合做,理解和適應變化,以結果和行動爲準則,努力追求成功。']"}, 5 {"position": ["25664-政府行業交付項目經理"], "position_type": ["產品/項目類"], "persons": ["2"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46484&keywords=&tid=0&lid=0", "work_duty": "['一、負責騰訊雲政府行業的項目交付管理工做;', '二、負責項目資源的組織與協調,確保項目團隊各干係人及內外部合做團隊的協同工做; ', '三、負責項目計劃的制定、跟蹤與維護,確保項目按計劃完成,並解決交付中的各種問題;', '四、協助收集客戶需求和用戶反饋,驅動研發團隊完善產品,確保項目順利經過驗收。']", "work_request": "['一、全日制統招本科及以上學歷,5年以上政府行業經驗,至少深刻參與5個政府行業大中型項目;', '二、有在大型企業工做的經歷,管理過20人以上的項目團隊,有豐富的跨部門、跨組織溝通協調經驗,可以應對複雜的項目環境;', '三、熟悉研發過程,包括產品設計、需求分析、架構設計、開發、測試、運維等,熟悉敏捷開發過程;', '四、有出色的溝通能力和技巧,可以千方百計推進項目的順利進行,有強烈的結果導向意識;', '五、具有良好的項目管理、客戶關係維護能力,和優秀的溝通技巧,能妥善協調好客戶、合做夥伴、內部團隊的合做關係;', '六、有很是強的事業心、責任感和擔當精神,有較強的抗壓能力,能並行處理多個項目工做,能承受必定程度的出差或駐場工做;', '七、有PMP、ITIL證書者優先,信息產業部系統集成項目經理證書者優先。']"}, 6 {"position": ["PCG14-應用寶數據挖掘算法工程師(深圳)"], "position_type": ["技術類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46483&keywords=&tid=0&lid=0", "work_duty": "['負責提供合適的推薦算法模型;', '負責研究業內領先的技術,結合騰訊各個業務平臺的數據,根據應用中心和社交渠道這兩個場景給出具體的實驗數據,而且評估結果;', '負責根據不一樣的算法模型,上報業務須要的統計數據,協助各類算法的實施;', '研究已有算法的瓶頸,提出合理的改進措施和解決方案。']", "work_request": "['計算機、應用數學、人工智能、模式識別、統計、自控等專業的碩士或者博士優先;', '2年以上相關工做經驗;', '對機器學習、數據挖掘算法及其在互聯網上的應用有比較深刻的理解;', '熟悉掌握C/C++語言;', '有大規模分佈式計算平臺的使用和並行算法開發經驗;', '嚴密的數學思惟、突出的分析和概括能力、優秀的溝通表達能力;', '有互聯網廣告,電商,搜索等方面推薦經驗優先。']"}, 7 {"position": ["19867-遊戲後臺開發工程師(深圳)"], "position_type": ["技術類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46482&keywords=&tid=0&lid=0", "work_duty": "['負責遊戲後臺架構設計;', '負責遊戲後臺系統模塊以及新特性開發;', '負責服務器性能優化和體驗優化。']", "work_request": "['2年以上游戲服務器後臺工做經驗,有完整的項目經驗;', '紮實的編程基礎,對高在線大併發遊戲後臺架構有必定認識;', '熟悉Unix/Linux操做系統下的C/C++開發;', '熟悉TCP/IP協議相關知識,熟悉網絡編程,熟悉數據庫;', '瞭解遊戲服務器架構及性能優化方法;', '具有良好的分析解決問題能力,能獨立承擔後臺邏輯系統開發工做;', '高度的責任心、良好的溝通能力和團隊合做精神。']"}, 8 {"position": ["TME-全民K歌項目經理(深圳)"], "position_type": ["產品/項目類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46478&keywords=&tid=0&lid=0", "work_duty": "['負責全民K歌版本計劃制定,風險監控,過程跟蹤,保障版本目標的實現;', '負責FT內目標確認,目標拆解,資源分配以及目標達成狀況跟進,推進各角色協同工做;', '發現、總結、跟蹤過程問題,推進團隊各環節持續改進,提升效率。']", "work_request": "['本科以上學歷,計算機或相關專業;', '3年以上軟件項目管理經驗,有互聯網、軟件領域技術開發經驗優先;', '精通軟件項目過程管理,對敏捷項目管理有實際應用經驗及深入理解;', '具備良好的執行力和責任心,能推進項目團隊朝目標前進;', '具備豐富的與人溝通、交流和組織能力,出色的團隊合做精神;']"}, 9 {"position": ["25928-高級語音算法工程師(上海)"], "position_type": ["技術類"], "persons": ["1"], "place": ["上海"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46477&keywords=&tid=0&lid=0", "work_duty": "['負責遊戲語音算法優化;', '負責語音前沿技術研究;', '負責遊戲語音現網版本算法維護升級。']", "work_request": "['本科及以上學歷;', '熟悉PC/Android/iOS SDK任一平臺C/C++開發,性能優化; ', '熟悉數字信號處理,數學功底紮實,熟悉MATLAB仿真; ', '熟悉語音前處理算法AEC,AGC,VAD,NS,CNG,JitterBuffer,Mix等算法;', '熟悉常見Codec,Opus/AAC/Speex等;', '有AI語音前處理經驗優先;', '熟悉WebRTC,Speex,Opus等開源代碼。']"}, 10 {"position": ["HY-遊戲發行/運營培訓生(深圳)"], "position_type": ["產品/項目類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46481&keywords=&tid=0&lid=0", "work_duty": "['遊戲發行/運營培訓生項目致力於培養高潛力的遊戲運營人才,以知足快速增加遊戲業務需求;', '項目採用定製化的培養方式,經過專班學習,名師輔導和項目實戰,提高學員的產品sense、運營能力及通用素質,使學員成爲優秀的遊戲發行/運營人才。', '協助項目製做人與研發商共同制定運營目標和工做計劃,約定的各階段遊戲優化、運營開發和運營支持工做;', '推進遊戲研發商的平常溝通,密切關注研發和運營籌備進度同時提供必要協助;', '指導並支持項目組內不一樣職能員工的平常工做,推進合做部門的目標和工做計劃制定;', '根據項目需求,制定並推廣項目流程規範,確保項目有序推動;', '及時發現並跟蹤解決項目問題,有效管理項目風險。']", "work_request": "['熱愛並樂於體驗遊戲,對研發與運營有必定的瞭解,保持強烈的好奇心和求知慾;', '優秀的中英文讀寫能力;', '積極主動,可以承受高壓的工做。']"}, 11 {"position": ["25928-高級圖形開發工程師(上海)"], "position_type": ["技術類"], "persons": ["3"], "place": ["上海"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46480&keywords=&tid=0&lid=0", "work_duty": "['負責遊戲引擎圖形相關特性的開發;', '負責渲染流程和算法的優化,以及相關工具的開發;', '負責圖形兼容性分析以及疑難問題的分析定位工做。']", "work_request": "['本科以上學歷,精通C/C++,具有紮實的數據結構和算法基礎,熟悉經常使用設計模式;', '具有計算機圖形學知識,熟練掌握3D圖形渲染技術,熟悉OpenGL以及Shader開發;', '熟練掌握3D遊戲引擎架構, 熟悉3D引擎的接口和遊戲製做流程;', '3年以上3D引擎(Unreal、Unity等)開發經驗,一年以上渲染相關開發和優化經驗;', '深入理解客戶端框架和其餘核心模塊的實現,有主導過核心模塊的開發經驗者優先;', '熟悉移動端GPU/CPU架構,有移動端渲染開發經驗者優先;', '責任心強,善於溝通,對遊戲前沿技術應用抱有熱情。']"}, 12 {"position": ["28481-健康保險行業合做高級經理(深圳)"], "position_type": ["市場類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46474&keywords=&tid=0&lid=0", "work_duty": "['一、負責商業保險行業客戶資源拓展(包括不限於保險公司、創新保險平臺、行業協會等專業領域);', '二、拓展相關行業合做夥伴以及合做機構,整合公司已有產品和資源,造成場景化的創新解決方案;', '三、蒐集整理健康保險行業的市場動態、政策變更等行業信息,解讀反饋助推業務策略制定;', '四、整合資源,設計制定並推動商業合做方案落地,有效撬動行業資源合做。']", "work_request": "['一、全日制本科及以上學歷,三年以上健康保險領域工做經驗;', '二、熟悉保險行業,有健康險創新產品運營經驗或創新平臺運營經驗; ', '三、具有良好的溝通表達能力,清晰的思惟邏輯,敏銳的洞察力,較強的自驅力和執行力; ', '四、對工做有高度的責任心和激情,注重團隊合做,適應頻繁差旅需求。']"}, 13 {"position": ["25928-前端測試開發工程師(深圳)"], "position_type": ["技術類"], "persons": ["1"], "place": ["深圳"], "time": ["2018-12-19"], "detail_link": "https://hr.tencent.com/position_detail.php?id=46473&keywords=&tid=0&lid=0", "work_duty": "['負責平臺類軟件的測試開發工做;', '負責平臺組件的接口測試、單元測試工做;', '可以在關鍵技術上給予團隊技術指引和支持;', '按時完成安排的移動端開發任務;', '負責與項目組之間的協調,推進工做,幫助項目組推進整個項目質量的提高。']", "work_request": "['本科及以上學歷,計算機相關專業,開發或者測試開發出身,有軟件開發的基礎;', '2-3年以上軟件行業或者互聯網行業經驗,熟悉Windows編程或Android/iOS編程;', '熟悉軟件開發流程,熟悉Android/iOS環境下自動化測試技術;', '紮實的測試用例設計能力,熟悉主流自動化方法;', '具有紮實的C++、C或Object-C程序設計基礎。', '有如下任意一項經驗者優先:', '較強的DEBUG能力;', '有Android、iOS產品自動化測試經驗。']"}, ......