Python爬虫爬取智联招聘职位信息
2017-09-11 00:00
603 查看
目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中
#coding:utf-8 import urllib2 import re import xlwt class 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.准备正则表达式 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页数据....'%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()
相关文章推荐
- Python爬虫爬取智联招聘职位信息
- 通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息
- python爬虫,获取拉勾网职位信息,修改网上旧版不能用的问题
- Python爬虫项目:抓取智联招聘信息
- [置顶] python3 scrapy 入门级爬虫 爬取数万条拉勾网职位信息
- python 多线程爬虫实例(爬取智联招聘信息)
- 一个用于爬取智联招聘信息的python爬虫
- Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
- scrapy框架下的两个爬虫分工合作爬取智联招聘所有职位信息。
- python爬虫实例——爬取智联招聘信息
- Python爬虫框架Scrapy实战教程---定向批量获取职位招聘信息
- Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
- 爬虫:用Python爬取招聘职位信息&职位需求分析
- Python爬虫系列之二:爬取2018公务员招考职位信息
- python爬虫scrapy框架,对于智联招聘职位进行抓取
- Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
- Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
- Python爬取智联招聘Python职位信息
- Python进阶(十八)-Python3爬虫小试牛刀之爬取CSDN博客个人信息
- [python]书籍信息爬虫示例