30分鐘寫出一個51job職位爬蟲,0基礎(chǔ)小白也能寫

30分鐘寫出一個51job職位小爬蟲,小白也能寫的出來,不用懂正則, 不用懂xpath,分分鐘寫出來,大神走開

前提環(huán)境:你的電腦里裝過python 2/3 和 pip(python包管理工具)

  • 第一步: 命令行輸入 sudo pip install scrapy
    安裝scrapy,scrapy是一個非常流行的爬蟲框架使用簡單,這一步你網(wǎng)速夠快5秒搞定
  • 第二步:命令行輸入 scrapy startproject my51JobSpider
    創(chuàng)建了一個scrapy叫 my51JobSpider,看看目錄,創(chuàng)建成功,耗時1秒
├── README.md
└── my51JobSpider
    ├── my51JobSpider
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── items.py
    │   ├── middlewares.py
    │   ├── pipelines.py
    │   ├── settings.py
    │   └── spiders
    │       ├── __init__.py
    │       └── __pycache__
    └── scrapy.cfg

下面來簡單介紹一下各個主要文件的作用:

scrapy.cfg :項目的配置文件
/ :項目的Python模塊冬耿,將會從這里引用代碼
items.py :項目的目標文件
pipelines.py :項目的管道文件
settings.py :項目的設(shè)置文件
spiders/ :存儲爬蟲代碼目錄

Snip20180323_15.png
  • 第三步:進入spiders目錄下輸入 scrapy genspider mainSpider "51job.com"
    目錄下創(chuàng)建一個名為mainSpider的爬蟲爱咬,并指定爬取域的范圍是"51job.com",當你敲的比較慢吧,給你1秒鐘
    進入目錄看看里面現(xiàn)在有什么吧


    Snip20180323_17.png

start_urls = () :爬取的URL元祖/列表笋鄙。爬蟲從這里開始抓取數(shù)據(jù)找岖,所以爹脾,第一次下載的數(shù)據(jù)將會從這些urls開始货抄。其他子URL將會從這些起始URL中繼承性生成。

parse(self, response) :解析的方法,每個初始URL完成下載后將被調(diào)用,調(diào)用的時候傳入從每一個URL傳回的Response對象來作為唯一參數(shù),主要作用如下:

負責解析返回的網(wǎng)頁數(shù)據(jù)(response.body),提取結(jié)構(gòu)化數(shù)據(jù)(生成item)
生成需要下一頁的URL請求曲管。

  • 第四步:我們現(xiàn)在分析一個51job的結(jié)構(gòu)
    下圖是各個職位類型的入口


    image.png

    這時候我們需要用到兩個神器 chrome瀏覽器和XPath Helper插件,別說你沒chrome,下載一個唄
    不會正則和XPATH怎么爬呢,重點來了!!!!

    右擊
    image.png

    打開XPath Helper插件
    image.png

    現(xiàn)在你的屏幕應(yīng)該是這樣的
    image.png

    我們選擇要爬取的連接


    image.png

    右擊標簽->copy->copy xpath,我們會得到一串神奇的字符
    /html/body/div[5]/div[2]/div[1]/a[1]
    Snip20180323_31.png

    輸入xpath 插件
    image.png

    很顯然這不是我們想要的鏈接,介紹一個xpath語法,在后面加上/@xxx,就代表獲取這個表情的xxx屬性,我們試試
    /html/body/div[5]/div[2]/div[1]/a[1]/@href
    image.png

    ok這樣就獲取到了我們想要的鏈接,但是只有一條,再來說明一下xpath第二個重要的語法,//xxx代表獲取這個層級下所有的xxx標簽,我們繼續(xù)改造
    /html/body/div[5]/div[2]//div//a/@href
    image.png

    搞定!
    寫行代碼

    def parse(self, response):
        liststype = response.xpath('/html/body/div[5]/div[2]//div//a/@href')
        for url in liststype:
            print url.extract()

運行看看效果~~~~~ 兜兜轉(zhuǎn)轉(zhuǎn)介紹了很多基礎(chǔ)知識 ~~~ 10分鐘過去了


Snip20180323_28.png
  • 第五步:殊途同歸
    //[@id="resultList"]/div[4]/p/span/a/@href
    同樣道理改造一下
    //
    [@id="resultList"]//div/p/span/a/@href

    image.png

    除了內(nèi)容我們還要獲取一下頁碼的鏈接
    //[@id="resultList"]/div[55]/div/div/div/ul/li[3]/a
    同樣道理改造一下
    //
    [@id="resultList"]/div[55]/div/div/div/ul//li/a/@href
    5分鐘~~~ 瑟瑟發(fā)抖~~~
    image.png

  • 第六步:終極對決
    終于到了我們最后一關(guān)啦.額..最后一頁


    image.png

    同樣道理獲取我們想要的信息,大家都很聰明應(yīng)該能明白的~ 5分鐘應(yīng)該夠了吧
    職位名稱 = '/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/text()'
    地區(qū) = '//span[@class="lname"]/text()'
    薪資 = '/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()'
    經(jīng)驗 = '/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[1]/text()'
    雪咯 = '/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[2]/text()'

  • 第⑦步:把代碼補全
    強行9分鐘~~

    def parse(self, response):
        liststype = response.xpath('/html/body/div[5]/div[2]//div//a/@href')
        for url in liststype:
            yield scrapy.Request(url=url.extract(),callback=self.parseSearch)

        pass
    def parseSearch(self,response):
        listsjob = response.xpath('//*[@id="resultList"]//div/p/span/a/@href')
        listpages = response.xpath('//div[@class="p_in"]/ul/li/a/@href')
        for page in listpages:
            yield scrapy.Request(url=page.extract(),callback=self.parseSearch)
        for url in listsjob:
            yield scrapy.Request(url=url.extract(),callback=self.parseDesc)
        pass

    def parseDesc(self,response):
        context= response.text
        title = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/text()').extract()[0]
        area = response.xpath('//span[@class="lname"]/text()').extract()[0]
        money = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()').extract()[0]
        exp = response.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[1]/text()').extract()[0]
        study = response.xpath('/html/body/div[3]/div[2]/div[3]/div[1]/div/div/span[2]/text()').extract()[0]
        all = response.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/text()').extract()[0]
        lists = all.replace(' ','').replace('\r','').replace('\t','').split('|')
        company = lists[0]
        people = lists[1]
        type = lists[2]

        print (title)
        item = My51JobspiderItem()
        item['title'] = title
        item['area'] = area
        item['money'] = money
        item['company'] = company
        item['people'] = people
        item['type'] = type
        item['study'] = study
        item['exp'] = exp
        yield item
        pass

看看效果~~ good


image.png

總結(jié):

娛樂貼~~ 給大家多一個無聊時的樂趣,xpath還是有很多語法需要學習,還有scrapy,有問題直接問,保證回答但是不許罵我,還有建議大家不要在繁忙時間隨便爬,友好一點,凌晨兩三點去偷偷的干
github地址:https://github.com/CZXBigBrother/51JobSpider

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棺禾,一起剝皮案震驚了整個濱河市悬襟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌参淹,老刑警劉巖筐付,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姥敛,死亡現(xiàn)場離奇詭異渠概,居然都是意外死亡辩恼,警方通過查閱死者的電腦和手機米辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門狸页,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傲隶,“玉大人跺株,你說我怎么就攤上這事袖扛。” “怎么了界牡?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵来累,是天一觀的道長。 經(jīng)常有香客問我窘奏,道長嘹锁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任着裹,我火速辦了婚禮领猾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骇扇。我一直安慰自己摔竿,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布少孝。 她就那樣靜靜地躺著继低,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稍走。 梳的紋絲不亂的頭發(fā)上袁翁,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天冷溃,我揣著相機與錄音,去河邊找鬼梦裂。 笑死似枕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的年柠。 我是一名探鬼主播凿歼,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冗恨!你這毒婦竟也來了答憔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤掀抹,失蹤者是張志新(化名)和其女友劉穎虐拓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傲武,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蓉驹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揪利。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片态兴。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疟位,靈堂內(nèi)的尸體忽然破棺而出瞻润,到底是詐尸還是另有隱情,我是刑警寧澤甜刻,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布绍撞,位于F島的核電站,受9級特大地震影響得院,放射性物質(zhì)發(fā)生泄漏傻铣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一尿招、第九天 我趴在偏房一處隱蔽的房頂上張望矾柜。 院中可真熱鬧阱驾,春花似錦就谜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喧枷,卻和暖如春虹统,著一層夾襖步出監(jiān)牢的瞬間弓坞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工车荔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渡冻,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓忧便,卻偏偏與公主長得像族吻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子珠增,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 序言第1章 Scrapy介紹第2章 理解HTML和XPath第3章 爬蟲基礎(chǔ)第4章 從Scrapy到移動應(yīng)用第5章...
    SeanCheney閱讀 15,054評論 13 61
  • scrapy學習筆記(有示例版) 我的博客 scrapy學習筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 12,670評論 4 46
  • 我獨坐在冬季的閣樓里 任由暖陽把思念變得粘稠 那朵流動的云霞是否看清了你的臉頰 透明里塵埃里保留著你起伏的聲音 我...
    Elope_小私奔閱讀 352評論 3 6
  • 橋燈給河面裝上簾子 任閃爍的彩燈穿過 依然均勻而堅定 幾片柳葉還固執(zhí)地抱著枝條 其實 它們可以在冰面上起舞 風中的...
    與你共飲閱讀 170評論 0 1
  • 種絲瓜超歌。栽種絲瓜,要天天澆水蒂教,要記得遮陽巍举。初長的絲瓜也像嬰兒一樣需要姆媽的精心照料。一天天凝垛,絲瓜先是生出細細的藤蔓...
    不夜侯閱讀 394評論 0 5