爬虫工具在就业市场的受欢迎程度

你们都是来看这个图的吧
爬虫工具统计

整整两个月之前,由于项目需要,我需要学习一下爬虫技术。我看了很多文章,也不知道哪个工具好,哪个工具受欢迎,学了哪个工具以后会有利于找工作。我想了半天,突然想到了,何不直接上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 csv

class 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 skills
    keywords = ["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]

    @classmethod
    def 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 spider


    def 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 page
        next_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.htm
        for link in links:
            m = re.search('http://jobs.zhaopin.com/(\d+).htm', link)
            if m == None:
                continue
            yield 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的人很欣慰。

猜你喜欢

转载自blog.csdn.net/juwikuang/article/details/72775173