Python爬蟲爬取智聯招聘職位資訊__Python

來源:互聯網
上載者:User

目的:輸入要爬取的職位名稱,五個意向城市,爬取智聯招聘上的該資訊,並列印進表格中

#coding:utf-8import urllib2import reimport xlwtclass ZLZP(object):    def __init__(self,workname,citys):        # 記錄尋找工作名稱        self.workname = workname        # 基礎URL地址        self.url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?'        # 工作名稱        args = 'kw=%s&jl='%workname        # 工作地點        for city in citys:            # 判斷城市是否為最後一個            if city == citys[-1]:                args += city            else:                args += city                args += '%2B'        # kw=python&jl=北京%2B上海%2B南京%2B廣州%2B深圳        # 拼接完整的url地址        self.url += args        self.headers = {            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'        }    # 根據頁碼擷取某一頁HTML原始碼    def get_page(self,pageNum):        # 1.根據頁碼拼接完整的url地址        getUrl = self.url + '&p=%s'%pageNum        # 2.建立request對象        request = urllib2.Request(getUrl,headers=self.headers)        try:            response = urllib2.urlopen(request)        except Exception ,e:            print '擷取第%s頁資料失敗,原因%s'%(pageNum,e)            return None        else:            return response.read()    # 從html代碼中提取總職位元    def get_total(self,html):        # 1.準備Regex        pattern = re.compile(r'<span class="search_yx_tj.*?em>(.*?)</em>',re.S)        # 2.根據Regex從原始碼中尋找資料        rs = re.search(pattern,html)        # 3.記錄總職位元,計算總頁數        total = int(rs.group(1))        print  '共搜尋到%s個相關職位資訊...'%total        # 不能被60整除,總頁碼+1        if total%60 == 0:            self.totalPage = total/60        else:            self.totalPage = total/60+1    # 提取資料函數    def get_data(self,html):        # 1.準備正則        # print html        pattern = re.compile(r'<table.*?class="newlist.*?<td class="zwmc.*?<a.*?>(.*?)</a>.*?<td class="gsmc.*?_blank">(.*?)</a>.*?<td class="zwyx">(.*?)</td.*?<td class="gzdd">(.*?)</td>',re.S)        # 2.從html原始碼中搜尋        results = re.findall(pattern,html)        # 3.去除資料中標籤        rs_data = []        for rs in results:            remove_b = re.compile(r'<.*?>',re.S)            name = re.sub(remove_b,'',rs[0])            rs_tp = (name,rs[1],rs[2],rs[3])            rs_data.append(rs_tp)        return rs_data    # 開始爬蟲函數    def start(self):        # 1.擷取第一頁查詢職位的HTML原始碼        html = self.get_page(1)        if html == None:            return        # 2.從html原始碼中提取總職位元        self.get_total(html)        # 3.for迴圈迴圈總頁數次(迴圈10次)        # 建立workbook對象        workbook = xlwt.Workbook(encoding='utf-8')        print type(self.workname)        # unicode 將一個str類型的字串轉換為unicode字元        # 中文編碼格式GBK,        print type(unicode(self.workname,encoding='utf-8'))        name = u'智聯表'+unicode(self.workname,encoding='utf-8')        print type(name)        sheet = workbook.add_sheet(name)        sheet.write(0,0,'職位名稱')        sheet.write(0,1,'公司名稱')        sheet.write(0,2,'職位月薪')        sheet.write(0,3,'工作地點')        # count 記錄當前的行號        count = 1        for x in range(1,11):            # 1.根據頁碼擷取該頁的HTML原始碼            print '正在寫入第%s頁資料....'%x            html = self.get_page(x)            if html == None:                continue            # 2.從html原始碼中提取資料            rs_data = self.get_data(html)            # 3.寫入本地檔案            for rs in rs_data:                sheet.write(count,0,rs[0])                sheet.write(count,1,rs[1])                sheet.write(count,2,rs[2])                sheet.write(count,3,rs[3])                count+=1        # 儲存檔案        print type(self.workname)        filename = u'智聯%s職位資訊.xls'%unicode(self.workname,encoding='utf-8')        workbook.save(filename)'''    Python3之前:    要儲存到本地的資料,保證是UTF-8編碼    要在Python中使用的字元,保證是Unicode類型的字元    unicode(self.workname,encoding='utf-8')    字串類型 str 輸入的常值內容、''或""包裹的文本'''if __name__ == '__main__':    workname = raw_input('請輸入要查詢的工作名稱:')    # 存放工作城市    citys = []    # 只要城市小於5個,繼續輸入城市    while len(citys) < 5:        city = raw_input('請輸入意向城市,最多輸入5個,輸入0結束:')        if city == '0':            break        citys.append(city)    zlzp = ZLZP(workname,citys)    zlzp.start()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.