Python爬虫爬取智联招聘职位信息
生活随笔
收集整理的這篇文章主要介紹了
Python爬虫爬取智联招聘职位信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目的:輸入要爬取的職位名稱,五個意向城市,爬取智聯招聘上的該信息,并打印進表格中
#coding:utf-8 import urllib2 import re import 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 += cityelse:args += cityargs += '%2B' # kw=python&jl=北京%2B上海%2B南京%2B廣州%2B深圳 # 拼接完整的url地址 self.url += argsself.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.準備正則表達式 pattern = re.compile(r'<span class="search_yx_tj.*?em>(.*?)</em>',re.S)# 2.根據正則表達式從源代碼中查找數據 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頁數據....'%xhtml = 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()總結
以上是生活随笔為你收集整理的Python爬虫爬取智联招聘职位信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单字双字三字_单字写法-单字怎么读-双字
- 下一篇: websocket python爬虫_p