用python抓取智联招聘信息并存入excel
用python抓取智联招聘信息并存入excel
tags:python 智联招聘导出excel
引言:前一阵子是人们俗称的金三银四,跳槽的朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步作出调整。建议不要看到身边的人涨了工资就盲目的心动。一般来说跳槽后要熟悉新的环境会浪费不少时间,如果现在的工作在氛围和自身进步上还可以接受,其他比如待遇方面可以和公司协调解决。
本文参考了yaoyefengchen的博客:文章链接,并进行了地域搜索优化和将存储方式由cvs改成大家常用的excel。下面进入正文
先说一下大概流程:
在智联职位搜索页面上选好自己的搜索条件后,发现链接地址为:
http://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京&kw=php高级工程师&sm=0&re=2006&isfilter=1&p=1&sf=10001&st=15000
分析链接中的参数如下(过滤条件可以选择不写),并构造出请求的数据,header的设置只要可以访问网页即可。
paras = { 'jl': city, # 搜索城市 'kw': keyword, # 搜索关键词 'isadv': 0, # 是否打开更详细搜索选项 'isfilter': 1, # 是否对结果过滤 'p': page, # 页数 're': region # region的缩写,地区,2005代表海淀 } # sf=10001&st=15000这两个是我筛选的工资区间,如果有这个需求可以自己添加参数。 url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)
yaoyefengchen用的是正则匹配出职位,薪资,公司等信息,并没有提供具体地域(比如海淀还是朝阳)对应的region。我后来是用的xpath提取出了北京的各个地域组成字典,直接输入地区的汉字就可以了。如下:
# 取搜索页面得到地域的对应数字 比如海淀对应2005 def parseHtmlToGetRegion(regionAddress): url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京&sm=0&isfilter=1&p=1&re=2006' # 获取代理ip地址 只取前五页 html= getHtml(url) regionId = html.xpath('/html/body/div[3]/div[3]/div[1]/div[4]/div[1]/div[2]/a/@href') region = html.xpath('/html/body/div[3]/div[3]/div[1]/div[4]/div[1]/div[2]/a/text()') #解析一下region中的编号去掉无效内容 regionList = {} for i,regionHref in enumerate(regionId): if i==0: continue regionList[region[i]] = regionId[i][-4::] return regionList.get(regionAddress)
另外,cvs格式在用一些工具比如excel打开的时候经常出现乱码,需要转化或者下载一些专用的软件。我觉得很不方便,所以直接存成了excel格式,不得不说,在存数据到excel文件这方面,python简直比php容易太多了。
# 存入excle def write_xls_file(filename, headers, jobs): table = xlwt.Workbook(encoding='utf8') table_page = table.add_sheet('jobs') for i,header in enumerate(headers): table_page.write(0,i,header) for j,items in enumerate(jobs,start = 1): for q,item in items.items(): table_page.write(j, q, item) table.save(filename)
完整代码如下,可以直接使用。别忘了保存文章最下面的user_agents.py文件
#-*- coding: utf-8 -*- ''' Created on 2018-05-7 @author: Vinter_he ''' import re import requests import xlwt from tqdm import tqdm from urllib.parse import urlencode from requests.exceptions import RequestException from lxml import etree import user_agents import random import datetime def get_one_page(city, keyword, region, page): ''' 获取网页html内容并返回 ''' paras = { 'jl': city, # 搜索城市 'kw': keyword, # 搜索关键词 'isadv': 0, # 是否打开更详细搜索选项 'isfilter': 1, # 是否对结果过滤 'p': page, # 页数 're': region # region的缩写,地区,2005代表海淀 } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 'Host': 'sou.zhaopin.com', 'Referer': 'https://www.zhaopin.com/', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9' } url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras) try: # 获取网页内容,返回html数据 response = requests.get(url, headers=headers) # 通过状态码判断是否获取成功 if response.status_code == 200: return response.text return None except RequestException as e: return None def parse_one_page(html): ''' 解析HTML代码,提取有用信息并返回 ''' # 正则表达式进行解析 pattern = re.compile('<a style=.*? target="_blank">(.*?)</a>.*?' # 匹配职位信息 '<td class="gsmc"><a href="(.*?)" target="_blank">(.*?)</a>.*?' # 匹配公司网址和公司名称 '<td class="zwyx">(.*?)</td>', re.S) # 匹配月薪 # 匹配所有符合条件的内容 items = re.findall(pattern, html) for item in items: job_name = item[0] job_name = job_name.replace('<b>', '') job_name = job_name.replace('</b>', '') yield { 0: job_name, 1: item[1], 2: item[2], 3: item[3] } # 存入excle def write_xls_file(filename, headers, jobs): table = xlwt.Workbook(encoding='utf8') table_page = table.add_sheet('jobs') for i,header in enumerate(headers): table_page.write(0,i,header) for j,items in enumerate(jobs,start = 1): for q,item in items.items(): table_page.write(j, q, item) table.save(filename) def main(city, keyword, region, pages): ''' 主函数 ''' filename = '智联_' +datetime.date.today().strftime('%Y-%m-%d')+ city + '_' + keyword + '.xls' headers = ['job', 'website', 'company', 'salary'] jobs = [] for i in tqdm(range(pages)): ''' 获取该页中所有职位信息,写入xls文件 ''' region = parseHtmlToGetRegion(region) html = get_one_page(city, keyword, region, i) items = parse_one_page(html) for item in items: jobs.append(item) write_xls_file(filename, headers, jobs) def getHtml(url): response = requests.get(url=url, headers={'User-Agent':random.choice(user_agents.user_agents)}, timeout=10).text html = etree.HTML(response) return html # 取搜索页面得到地域的对应数字 比如海淀对应2005 def parseHtmlToGetRegion(regionAddress): url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京&sm=0&isfilter=1&p=1&re=2006' # 获取代理ip地址 只取前五页 html= getHtml(url) regionId = html.xpath('/html/body/div[3]/div[3]/div[1]/div[4]/div[1]/div[2]/a/@href') region = html.xpath('/html/body/div[3]/div[3]/div[1]/div[4]/div[1]/div[2]/a/text()') #解析一下region中的编号去掉无效内容 regionList = {} for i,regionHref in enumerate(regionId): if i==0: continue regionList[region[i]] = regionId[i][-4::] return regionList.get(regionAddress) if __name__ == '__main__': main('北京', 'php工程师', '朝阳', 10)
下面是和以前一样的user_agents.py文件 这个文件以后就不给了大家可以自己保存一下备用
#!/usr/bin/python # -*- coding:utf-8 -*- ''' Created on 2018-04-27 @author: Vinter_he ''' user_agents = [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'Opera/9.25 (Windows NT 5.1; U; en)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)', 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12', 'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9' "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ]
希望大家多评论交流,互相学习低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python 工具——Anaconda+Pycharm 的安装过程
适用对象:编程完全小白,准备安装 Python 进行学习 本文特点: 十分具体详细,细致到了每一步安装过程的截图,看了此篇,你完全不用看其他教程,给出了软件的百度云以及自己找到的可用的 Pycharm 的激活方式,可以直接安好,并开始写出自己的第一个 Python 代码。 强烈建议: 如果还没有开始 Python 工具下载的初学者,切记不要直接装 Python,推荐直接装 Anaconda 要方便很多。建议安装 Anaconda+Pycharm 来学习 Python,尤其是对于学习数据分析的同学。如果你已经安装了 Python,也安装 Anaconda,这样也是完全可以的(多次入坑的血泪之谈,避免很多麻烦啊!) 大多 Python 初学者纠结于安装什么样的IDE,以及怎样安装,而大部分的教程都不是很详细,浪费了很长时间,都不一定安装成功。这其中很有可能在安装过程的繁琐中就放弃了学习,因而写下本文,一方面希望能让初学者不在安装上面浪费时间,进行快速高效安装;另一方面也算是对 Python 学习的一个总结。 工具下载:评论留言我会给资料下载链接 如有错误,请指出。 接下来我将详细介绍,并在...
- 下一篇
SpringBoot之整合Spring Security,为自己的系统提供安全保障
by 杨乐 需求: 1.权限控制:角色有多种角色,每个角色对应多个用户,每个角色又对应不同的菜单权限 2.资源控制: ①有些地址只能当用户登录之后才能访问 ②有些地址可以对无状态用户开放,例如API ③对不同角色的用户的访问的权限进行控制 ... 3.系统登录与注销:登录成功后将用户信息保存在系统中,转向成功页面,否则重新指向到登录页面,并提示错误信息 初步解决方案: 使用filter完成所有需求: ①将用户登录的信息保存在session中,在filter进行判断,请求的地址是否是在登录 之后才能访问,然后写一堆if判断,解决问题1 ②解决方法和问题①一样的,在filter中进行过滤 ③对不同角色有不同的权限则也可以在filter中操作,根据用户信息查到用户所属角 色,再进行判断,解决问题。 ④系统的登录和注销可以使用一个action,在action中进行这些逻辑处理。解决问题 遇...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器