爬虫工具在就业市场的受欢迎程度
你們都是來看這個(gè)圖的吧
整整兩個(gè)月之前,由于項(xiàng)目需要,我需要學(xué)習(xí)一下爬蟲技術(shù)。我看了很多文章,也不知道哪個(gè)工具好,哪個(gè)工具受歡迎,學(xué)了哪個(gè)工具以后會(huì)有利于找工作。我想了半天,突然想到了,何不直接上51job去看呢,于是,我查了15job上面北上廣深杭工資在15000以上的345個(gè)崗位,一個(gè)一個(gè)的打開所有的頁面,才找到了我想要的答案。具體看下文。
http://blog.csdn.net/juwikuang/article/details/66472279
當(dāng)時(shí)覺得自己好傻呀,一個(gè)學(xué)IT的,居然還這樣手動(dòng)去查??墒俏耶?dāng)時(shí)不會(huì)爬蟲技術(shù)呀。這又是一個(gè)先有雞還是先有蛋的問題。。。
這兩個(gè)月里,理由業(yè)余時(shí)間,我也陸陸續(xù)續(xù)研究了一下爬蟲技術(shù)。一開始,我想裝Nutch??墒茄b了半天也沒裝起來,真的沮喪。于是,我掉頭去學(xué)Scrapy。Scrapy是python,跟我的對(duì)python的了解,安裝python包,基本上就是conda install,pip install就搞定了,比java簡單多了。果然,上了Scrapy官網(wǎng)
https://scrapy.org/
一看,安裝Scrapy,就一句話。
$pip install scrapy
不過,我后來遇到點(diǎn)問題,Python找不到scarpy。我想,我是不是搞錯(cuò)了,我用的是Anaconda,于是,我把命令改成了
$conda install scarpy
這下Anaconda和Spyder可以找到Scarpy了。好吧,計(jì)算機(jī)的世界真是很神奇。Happy和Unhappy,就在一念間。一念成仙,一念成魔。
這之后,忙了幾天,把要爬的網(wǎng)站給爬了。爬下了很多數(shù)據(jù),有了數(shù)據(jù)后面就有很多故事了。。。
昨天,我又想起當(dāng)時(shí)傻乎乎的打開一張張網(wǎng)頁,覺得這樣不行,現(xiàn)在已經(jīng)熟悉Scrapy了,應(yīng)該寫個(gè)腳本爬51job,讓腳本告訴我哪個(gè)爬蟲工具熱門。昨天,寫了一個(gè)晚上,終于搞定了。終于還愿了。
代碼如下。
#this is to search for jobs and do statistics #created by Eric Chow 2017/5/25 import scrapy from scrapy import Spider from scrapy import signals import re #regular expression import csvclass SpyderJobSpider(Spider):name = "SpyderJob"start_urls = ['http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC%2B%E4%B8%8A%E6%B5%B7%2B%E5%B9%BF%E5%B7%9E%2B%E6%B7%B1%E5%9C%B3&kw=%E7%88%AC%E8%99%AB&sm=0&p=1']#keywords related with spider developer skillskeywords = ["SCRAPY", "NUTCH", "LUCENE", "HERITRIX", "SOLR", "SPHINX", "WEGMAGIC","PYSPIDER", "LARBIN", "HTMLPARSER", "CRAWL4J", "WEBCOLLECTOR", "JSOUP", "ELASTIC SEARCH", "HTTPCLIENT", "HTMLUNIT", "WEBDRIVER", "SELENIUM"]counts = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]@classmethoddef from_crawler(cls, crawler, *args, **kwargs):spider = super(SpyderJobSpider, cls).from_crawler(crawler, *args, **kwargs)crawler.signals.connect(spider.spider_closed, signal=signals.spider_closed)return spiderdef spider_closed(self, spider, reason):csvfile = file('results.csv', 'wb')writer = csv.writer(csvfile)writer.writerow(['skill', 'count'])data = []for i in range(0,len(self.keywords)):data.append((self.keywords[i], self.counts[i]))writer.writerows(data)csvfile.close()def parse(self, response):#navigate to next pagenext_page = response.css(".next-page::attr(href)").extract_first()if next_page!=None:yield scrapy.Request(next_page, self.parse)#find all links links = response.css("a::attr(href)").extract()#a valid url looks like that#http://jobs.zhaopin.com/416425134250016.htmfor link in links:m = re.search('http://jobs.zhaopin.com/(\d+).htm', link)if m == None:continueyield scrapy.Request(link, self.detail_parse)def detail_parse(self, response):contents = response.css(".tab-inner-cont")lines_unicode = contents[0].css("::text").extract()lines = [line.encode("utf-8") for line in lines_unicode]article="".join(lines)article = article.upper()for i in range(0,len(self.keywords)):if self.keywords[i] in article:self.counts[i] = self.counts[i]+1等等,說好的51job呢?怎么變成智聯(lián)招聘(zhaopin.com)了?
說來又是一把淚呀。用scrapy爬出來的51job頁面,是手機(jī)版的。而手機(jī)版有個(gè)特點(diǎn),就是下拉加載。我用的是爬蟲呀,我怎么讓爬蟲下拉加載呢?于是查了幾個(gè)方案,想讓51job返回電腦版,51job就是不配合。得,此路不通。
自然的,第二選擇就是zhaopin.com。下圖是zhaopin.com的職位列表,我的關(guān)鍵字是爬蟲,地點(diǎn)選了北上廣深。
首先,要解決分頁的問題。我在腳本里,不斷地去找當(dāng)前頁面的下一頁,并把下一頁交給parse函數(shù)。這樣,每頁都會(huì)爬到了。
接著,再去研究職位介紹頁面。
這頁面中間的職位描述,用了很多換行,所以其實(shí)我抓到的是很多unicode字符串。unicode字符串列表,是不用直接Join起來的,還要先轉(zhuǎn)成str類,才能join。感謝Google,這一步步,很快就找到對(duì)應(yīng)代碼了。
眼看勝利就在眼前,卻在陰溝翻船。我要的是一個(gè)最終統(tǒng)計(jì)結(jié)果,所以,只有爬蟲爬完了,我才能得到我的數(shù)據(jù)。我憑經(jīng)驗(yàn),覺得Spider類應(yīng)該有個(gè)close事件。那么我的輸入,應(yīng)該放在close事件里。我在官網(wǎng),找到了對(duì)應(yīng)的代碼。于是,我在close事件里寫了
#大概就是這個(gè)意思 yield {"Scrapy":count_scrapy}結(jié)果輸出文件里是空的。難道官網(wǎng)在騙我么?這年頭怎么官網(wǎng)也不可靠了。我的心情都跌倒了谷底。于是,我又去Google上查了個(gè)底朝天。不斷地改改改。改的我要絕望了。
突然,我開竅了。會(huì)不會(huì)爬蟲關(guān)閉了以后,就不再寫文件了呢?于是,我把yield改成了print,終于成功了。看看時(shí)間,已經(jīng)1點(diǎn)了。
看看現(xiàn)在的時(shí)間,也到了23點(diǎn)了,我要去洗洗睡了。今天能睡個(gè)好覺。
以后,找工作就容易了,可以自己寫個(gè)爬蟲,按照自己的需要,去爬自己想要的工作,不需要把所有的頁面打開看了。不知道身邊有沒有人找工作,我去寫個(gè)爬蟲。等有朋友需要的時(shí)候,我再去研究一下,到時(shí)候再分享。
差點(diǎn)忘了,爬蟲結(jié)果。這次的結(jié)果,scrapy才是第一,nutch第二。這讓我這個(gè)選擇了scrapy的人很欣慰。
總結(jié)
以上是生活随笔為你收集整理的爬虫工具在就业市场的受欢迎程度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ftp匿名登录 漏洞复现
- 下一篇: 文字识别软件测试初学者,【只要10分钟