爬虫工具在就业市场的受欢迎程度
你們都是來看這個圖的吧
整整兩個月之前,由于項目需要,我需要學習一下爬蟲技術。我看了很多文章,也不知道哪個工具好,哪個工具受歡迎,學了哪個工具以后會有利于找工作。我想了半天,突然想到了,何不直接上51job去看呢,于是,我查了15job上面北上廣深杭工資在15000以上的345個崗位,一個一個的打開所有的頁面,才找到了我想要的答案。具體看下文。
http://blog.csdn.net/juwikuang/article/details/66472279
當時覺得自己好傻呀,一個學IT的,居然還這樣手動去查。可是我當時不會爬蟲技術呀。這又是一個先有雞還是先有蛋的問題。。。
這兩個月里,理由業余時間,我也陸陸續續研究了一下爬蟲技術。一開始,我想裝Nutch。可是裝了半天也沒裝起來,真的沮喪。于是,我掉頭去學Scrapy。Scrapy是python,跟我的對python的了解,安裝python包,基本上就是conda install,pip install就搞定了,比java簡單多了。果然,上了Scrapy官網
https://scrapy.org/
一看,安裝Scrapy,就一句話。
$pip install scrapy
不過,我后來遇到點問題,Python找不到scarpy。我想,我是不是搞錯了,我用的是Anaconda,于是,我把命令改成了
$conda install scarpy
這下Anaconda和Spyder可以找到Scarpy了。好吧,計算機的世界真是很神奇。Happy和Unhappy,就在一念間。一念成仙,一念成魔。
這之后,忙了幾天,把要爬的網站給爬了。爬下了很多數據,有了數據后面就有很多故事了。。。
昨天,我又想起當時傻乎乎的打開一張張網頁,覺得這樣不行,現在已經熟悉Scrapy了,應該寫個腳本爬51job,讓腳本告訴我哪個爬蟲工具熱門。昨天,寫了一個晚上,終于搞定了。終于還愿了。
代碼如下。
#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呢?怎么變成智聯招聘(zhaopin.com)了?
說來又是一把淚呀。用scrapy爬出來的51job頁面,是手機版的。而手機版有個特點,就是下拉加載。我用的是爬蟲呀,我怎么讓爬蟲下拉加載呢?于是查了幾個方案,想讓51job返回電腦版,51job就是不配合。得,此路不通。
自然的,第二選擇就是zhaopin.com。下圖是zhaopin.com的職位列表,我的關鍵字是爬蟲,地點選了北上廣深。
首先,要解決分頁的問題。我在腳本里,不斷地去找當前頁面的下一頁,并把下一頁交給parse函數。這樣,每頁都會爬到了。
接著,再去研究職位介紹頁面。
這頁面中間的職位描述,用了很多換行,所以其實我抓到的是很多unicode字符串。unicode字符串列表,是不用直接Join起來的,還要先轉成str類,才能join。感謝Google,這一步步,很快就找到對應代碼了。
眼看勝利就在眼前,卻在陰溝翻船。我要的是一個最終統計結果,所以,只有爬蟲爬完了,我才能得到我的數據。我憑經驗,覺得Spider類應該有個close事件。那么我的輸入,應該放在close事件里。我在官網,找到了對應的代碼。于是,我在close事件里寫了
#大概就是這個意思 yield {"Scrapy":count_scrapy}結果輸出文件里是空的。難道官網在騙我么?這年頭怎么官網也不可靠了。我的心情都跌倒了谷底。于是,我又去Google上查了個底朝天。不斷地改改改。改的我要絕望了。
突然,我開竅了。會不會爬蟲關閉了以后,就不再寫文件了呢?于是,我把yield改成了print,終于成功了。看看時間,已經1點了。
看看現在的時間,也到了23點了,我要去洗洗睡了。今天能睡個好覺。
以后,找工作就容易了,可以自己寫個爬蟲,按照自己的需要,去爬自己想要的工作,不需要把所有的頁面打開看了。不知道身邊有沒有人找工作,我去寫個爬蟲。等有朋友需要的時候,我再去研究一下,到時候再分享。
差點忘了,爬蟲結果。這次的結果,scrapy才是第一,nutch第二。這讓我這個選擇了scrapy的人很欣慰。
總結
以上是生活随笔為你收集整理的爬虫工具在就业市场的受欢迎程度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ftp匿名登录 漏洞复现
- 下一篇: 【H5/JS】游戏常用算法-碰撞检测-包