python爬蟲scrapy項目詳解(關注、持續更新)

python爬蟲scrapy項目(一)

  爬取目標:騰訊招聘網站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&start)

  爬取內容:職位;職位類型;招聘人數;工做地點;發佈時間;招聘詳細連接;工做職責;工做要求

  反反爬措施:設置隨機user-agent、設置請求延時操做、

一、開始建立項目

1 scrapy startproject tencent

二、進入tencent文件夾,執行啓動spider爬蟲文件代碼,編寫爬蟲文件。

1 scrapy genspider hr "tencent.com"

  命令執行完,用Python最好的IDE---pycharm打開該文件目錄,會在你的當前目錄建立以下文件目錄。php

三、編寫該目錄下的items.py文件,設置你須要爬取的字段。

 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()

四、進入spiders文件夾,打開hr.py文件,開始編寫爬蟲文件

 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

五、編寫pipeline.py文件,處理接收到的數據

 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產品自動化測試經驗。']"}, ......
相關文章
相關標籤/搜索