使用python爬取智联招聘公司的行业

来源:互联网 发布:快图浏览 知乎 编辑:程序博客网 时间:2024/04/28 23:44

描述:

为了获取尽可能多的公司的行业
在智能招聘中搜索input中的公司,对于没有搜到的公司,跳过;
对于所有搜到的公司,提取搜索结果每一页的职位,然后打开职位页面,解析职位页面,得到公司行业
输出公司名称和公司行业

Input:

绿盟科技
浙江吉利控股集团有限公司
齐家网信息科技有限公司
鸿扬家装
鲁商置业股份有限公司
高校摇滚夜青年文化品牌
阳泉广播电视台
长城宽带网络服务有限公司广州分公司
锦江
重庆百事达汽车有限公司
重庆市人才交流服务中心
郑州吃货
邹平县广播电影电视中心
西安荣信文化产业发展有限公司
西安双羽九州图书文化有限公司
营商宝
艺术家
胜动集团
联信永益
老房子
美食客食品(中国)有限公司
罗丹摄影
科博留学
神朔铁路
盐亭县
百度爱好者

Output:

绿盟科技        互联网/电子商务,IT服务(系统/数据/维护)/多领域经营,北京,售前/售后技术支持工程师
上海齐家网信息科技股份有限公司  互联网/电子商务,家居/室内设计/装饰装潢,北京,销售经理
北京锦江北方物业管理有限公司第三分公司  物业管理/商业中心,酒店/餐饮,北京,前厅接待/礼仪/迎宾
锦江之星旅馆有限公司北方分公司  酒店/餐饮,北京,酒店管理
北京锦江富园大酒店有限公司      酒店/餐饮,娱乐/体育/休闲,其它,北京,电焊工/铆焊工
锦江之星旅馆有限公司    酒店/餐饮,旅游/度假,北京,酒店管理
锦江之星旅馆有限公司北京酒仙桥分公司    贸易/进出口,北京,前厅接待/礼仪/迎宾
北京锦江国际旅行社有限公司      旅游/度假,北京,财务经理
锦江麦德龙现购自运有限公司      贸易/进出口,零售/批发,互联网/电子商务,房地产/建筑/建材/工程,北京,店长/卖场经理/楼面管理
北京联信永益信息技术有限公司    IT服务(系统/数据/维护)/多领域经营,计算机硬件及网络设备,计算机软件,通信/电信运营、增值服务,北京,高级软件工程师
深圳市齐心文具股份有限公司      办公用品及设备,快速消费品(食品/饮料/烟酒/日化),北京,销售代表
深圳市斯维尔科技有限公司        计算机软件,计算机硬件及网络设备,房地产/建筑/建材/工程,北京,电话销售
浙江华策影视股份有限公司        媒体/出版/影视/文化传播,广告/会展/公关/市场推广,北京,其他
杭州迪普科技有限公司    计算机软件,计算机硬件及网络设备,通信/电信运营、增值服务,IT服务(系统/数据/维护)/多领域经营,北京,销售代表
北京易游假期旅行社有限公司      旅游/度假,互联网/电子商务,北京,客户服务专员/助理
易游天下国际旅行社(北京)有限公司石景山路门市部  旅游/度假,北京,网站编辑
易游天下国际旅行社(北京)有限公司外馆斜街分社    旅游/度假,北京,旅游产品销售
北京易游世界科技发展有限公司    旅游/度假,北京,销售代表
悠易互通(北京)广告有限公司      媒体/出版/影视/文化传播,互联网/电子商务,广告/会展/公关/市场推广,IT服务(系统/数据/维护)/多领域经
营,北京,销售总监
福建兴业担保有限公司北京分公司  金融/银行/投资/基金/证券/期货,北京,电话销售

Code:

 -*- coding: utf-8 -*-from sgmllib import SGMLParserimport codecsimport osimport timeimport urllibclass JobnumberFound(SGMLParser):        def reset(self):                SGMLParser.reset(self)                self.jobnumber = ''                self.count_text = 0                self.flag_jobnumber = False        def start_div(self, attrs):                for k,v in attrs:                        if k == 'class' and v =='currentsearch':                                self.flag_jobnumber = True        def end_div(self):                self.flag_jobnumber = False        def handle_data(self,text):                if self.flag_jobnumber == True:                        self.count_text += 1                        if self.count_text ==3:                                self.jobnumber = textclass Company_UrlFound(SGMLParser):        def reset(self):                SGMLParser.reset(self)                self.company_url = {}                self.string = ''                self.url = []                self.flag_jobname = 0                self.flag_companyname = 0        def start_td(self, attrs):                for k,v in attrs:                        if k == 'class' and v == 'Jobname':                                self.flag_jobname = 1                        elif k == 'class' and v == 'Companyname':                                self.flag_companyname = 1        def end_td(self):                        if self.flag_companyname == 1:                                self.flag_companyname = 0                                self.company_url[self.string] = self.url[0]                                self.string = ''                                self.url = []                        if self.flag_jobname == 1:                                self.flag_jobname = 0        def start_a(self, attrs):                if self.flag_jobname == 1:                        href = [v for k, v in attrs if k=='href']                        self.url.extend(href)        #               print self.url                if self.flag_companyname == 1:                        self.flag_companyname =2                #       print 'asdf'        def end_a(self):                if self.flag_companyname == 2:                        self.flag_companyname = 1        #       if self.flag_jobname == 2:        #               self.jobname ==1        def handle_data(self, text):                if self.flag_companyname ==2:                        self.string += text#                       print self.stringclass JOBFind(SGMLParser):        def reset(self):                SGMLParser.reset(self)                self.flag_jobname = False                self.industry = False                self.text = []                self.count = 0        def start_div(self, attrs):                for k,v in attrs:                        if k == 'class' and v == 'top-left':                                self.flag_jobname = True        def end_div(self):                self.flag_jobname = False        def start_a(self, attrs):                if self.flag_jobname == True:                        self.count += 1                        if self.count > 1:                                self.industry = True                #       for k,v in attrs:                #               self.text.append(v)        def end_a(self):                self.industry = False        def handle_data(self, text):                if self.industry == True:                        self.text.append(text)url_s = 'http://sou.zhaopin.com/Jobs/searchresult.ashx?jl=北京&kw='url_e = '&sm=0&p=1&sf=0&kt=2'sleep_download_time = 1count = 0err_file = open ('../data/erro4', 'w')arrive = Falsefor line in codecs.open("../../crawl/data/corp", "r"):        count2 = 0#       begintime=time.time()        lines = line.strip()        if (not arrive) and lines != '公司':                continue        if (not arrive) and lines == '公司':                arrive = True#       print lines#       continue        if "/" in lines:                continue        url = url_s + lines +url_e        #local = '../data/parseurl/' + lines + '.html'#       print url        usock = urllib.urlopen(url)        numberFound = JobnumberFound()        numberFound.feed(usock.read())#       print numberFound.jobnumber        try:                number = int(numberFound.jobnumber)        except:                err_file.write('error3: ' +  lines + ' ' + url + '\n')                usock.close()                numberFound.reset()                continue        usock.close()        numberFound.reset()#       print numberFound.jobnumber        page_number = number/30 +1        url_s2 = 'http://sou.zhaopin.com/Jobs/searchresult.ashx?jl=北京&kw=' + lines +'&sm=0&p='        url_e2 = '&sf=0&kt=2'        company_url = {}#       print page_number        if page_number > 10:                time.sleep(sleep_download_time)                if page_number > 30*120:                        page_number = 11#       print page_number        for i in range(1, page_number+1):#               print i                url = url_s2 + str(i) + url_e2                usock = urllib.urlopen(url)                com_urlfound = Company_UrlFound()                com_urlfound.feed(usock.read())        #       print com_urlfound.url        #       print com_urlfound.company_url                company_url.update(com_urlfound.company_url)                usock.close()                com_urlfound.reset()        for key in company_url.keys():                count2 += 1                #print key, company_url[key]                usock = urllib.urlopen(company_url[key])                try:                        jobfound = JOBFind()                        jobfound.feed(usock.read())                except:                        err_file.write('error1: ' +  key+ ' ' +company_url[key] + '\n')                        jobfound.reset()                        usock.close()                        continue                usock.close()                s = key + '\t'                if len(jobfound.text) > 0:                        for i in range(0, len(jobfound.text)-1):                                s += jobfound.text[i]                                s += ','                        s += jobfound.text[-1]                        print s                else:                        err_file.write('error2: ' +  key+ ' ' + company_url[key] + '\n')                jobfound.reset()                if count2%30 == 0:                        time.sleep(sleep_download_time+2)#                       print count2        if count%50==0:                err_file.close()                err_file = open ('../data/erro4', 'a')                time.sleep(sleep_download_time)#               print count#               print count,' .html download'#       print time.time()-begintime        count +=1err_file.close()


原创粉丝点击