python3小项目——爬取智联招聘信息(二)

来源:互联网 发布:奶茶店如何做网络 编辑:程序博客网 时间:2024/05/17 06:12

这两天,心血来潮又把前几天的爬取招聘信息程序丰富了一下,是对爬取到的信息再处理以及分类保存。

具体功能:

将全部信息保存成矩阵形式,去除无用信息,并在当前目录下生成文件夹并此文件夹下把信息分类保存成.csv格式

 #删除除"公司规模": "20人以下", "20-99人"; "最低学历": "博士","大专"; "经验": "3-5年","5-10年", "10年以上"的情况

根据公司性质分类保存信息。

具体问题及解决方法:

1、筛选数据

利用Dataframe筛选数据

 df = df[(df.经验 != '3-5年') & (df.经验 !='5-10年') & (df.经验 !='10年以上') & (df.最低学历 !='博士') & (df.最低学历 !='大专') & (df.公司规模 != '20人以下')]

df_pri = df[df.公司性质.isin(['民营'])]:选择公司性质为 '民营' 的对象

2、保存数据

利用os模块,path = os.getcwd()获取当前目录;os.mkdir(r'{}'.format(str(city)+str(job)))  自动生成文件夹并命名

df_com.to_csv()保存成csv格式

具体代码:

# -*- coding: utf-8 -*-"""Created on Wed Jun  7 09:21:52 2017@author: qiu"""'''@智联招聘职位搜索与数据获取@拉勾网 专注于互联网招聘的网站:https://www.lagou.com/ @拉勾网 招聘的公司较少,且大部分需要有经验的公司@拉勾网 查找限制选择性强@BOSS直聘 查找限制选择性强 对象大众化 http://www.zhipin.com@猎聘 更专业的招聘网站 有专门面向学生的招聘通道 https://campus.liepin.com/@应届生网 页面布局太烂,不建议爬取。不过有专门针对应届生的招聘会论坛等信息,确实不错 http://www.yingjiesheng.com/@由于拉钩和猎聘职位较少,而且可以满足高精确查找,这里只提供网址,自行搜索。***********************@智联招聘职位搜索与数据获取***************************'''import urllibfrom urllib.parse import *from bs4 import BeautifulSoupimport stringimport randomimport pandas as pdimport osheaders=["Mozilla/5.0 (Windows NT 6.1; Win64; rv:27.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"         "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:27.0) Gecko/20100101 Firfox/27.0"         "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"         "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:10.0) Gecko/20100101 Firfox/10.0"         "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/21.0.1180.110 Safari/537.36"         "Mozilla/5.0 (X11; Ubuntu; Linux i686 rv:10.0) Gecko/20100101 Firfox/27.0"         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/34.0.1838.2 Safari/537.36"         "Mozilla/5.0 (X11; Ubuntu; Linux i686 rv:27.0) Gecko/20100101 Firfox/27.0"         "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"         ]def get_content(url,headsers):    '''    @url:需要登录的网址    @headers:模拟的登陆的终端    *********************模拟登陆获取网址********************    '''    random_header = random.choice(headers)    req = urllib.request.Request(url)    req.add_header("User-Agent",random_header)    req.add_header("Get",url)    req.add_header("Host","sou.zhaopin.com")    req.add_header("refer","http://sou.zhaopin.com/")    html = urllib.request.urlopen(req)    contents = html.read()    #判断输出内容contents是否是字节格式    if isinstance(contents,bytes):        #转成字符串格式        contents=contents.decode('utf-8')    else:        print('输出格式正确,可以直接输出')##输出的是字节格式,需要将字节格式解码转成’utf-8‘    return (contents)    def get_content1(url,headsers):    '''    @url:需要登录的网址    @headers:模拟的登陆的终端    *********************模拟登陆获取网址********************    '''    random_header = random.choice(headers)    req = urllib.request.Request(url)    req.add_header("User-Agent",random_header)    req.add_header("Get",url)    req.add_header("Host","jobs.zhaopin.com")    req.add_header("refer","http://sou.zhaopin.com/jobs/searchresult.ashx")    html = urllib.request.urlopen(req)    contents = html.read()    #判断输出内容contents是否是字节格式    if isinstance(contents,bytes):        #转成字符串格式        contents=contents.decode('utf-8')    else:        print('输出格式正确,可以直接输出')##输出的是字节格式,需要将字节格式解码转成’utf-8‘    return (contents)    def get_links_from(job, city, page):    '''    @job:工作名称    @city:网址中城市名称    @page:表示第几页信息    @urls:所有列表的超链接,即子页网址        ****************此网站需要模拟登陆**********************    返回全部子网页地址    '''    urls=[]    for i in range(page):        url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl={}&kw={}&p={}".format(str(city),str(job),i)         url = quote(url, safe=string.printable)        info = get_content(url,headers)        soup = BeautifulSoup(info,"lxml")#设置解析器为“lxml”        link_urls = soup.select('td.zwmc a')        for url in link_urls:                  urls.append(url.get('href'))    return (urls)    #url = "http://s.yingjiesheng.com/result.jsp?keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&city=217&start=0&period=0&sort=score&jobtype=1"    #get_links_from('南京','数据挖掘', 5)def get_link_info(url):    '''    @爬取的地址    *****************获取此网站的有用信息并保存成字典形式****************    '''        info = get_content1(url,headers)    soup = BeautifulSoup(info,"lxml")#设置解析器为“lxml”    occ_name = soup.select('div.fixed-inner-box h1')[0]    com_name = soup.select('div.fixed-inner-box h2')[0]    com_url = soup.select('div.inner-left.fl h2 a')[0]    welfare = soup.select('div.welfare-tab-box')[0]    wages = soup.select('div.terminalpage-left strong')[0]    date = soup.select('div.terminalpage-left strong')[2]    exper = soup.select('div.terminalpage-left strong')[4]    num = soup.select('div.terminalpage-left strong')[6]    area = soup.select('div.terminalpage-left strong')[1]    nature = soup.select('div.terminalpage-left strong')[3]    Edu = soup.select('div.terminalpage-left strong')[5]    cate = soup.select('div.terminalpage-left strong')[7]    com_scale = soup.select('ul.terminal-ul.clearfix li strong')[8]    com_nature = soup.select('ul.terminal-ul.clearfix li strong')[9]    com_cate = soup.select('ul.terminal-ul.clearfix li strong')[10]    com_address = soup.select('ul.terminal-ul.clearfix li strong')[11]    data = {    "拉勾网":'https://www.lagou.com/',     "猎聘":"https://campus.liepin.com/",    "应届生":"http://www.yingjiesheng.com/",    "网址":url,    "工作名称":occ_name.text.strip(),    "公司名称":com_name.text,    "公司网址":com_url.get('href'),    "福利":welfare.text.strip(),    "月工资":wages.text.strip(),    "发布日期":date.text.strip(),    "经验":exper.text.strip(),    "人数":num.text.strip(),    "工作地点":area.text.strip(),    "工作性质":nature.text.strip(),    "最低学历":Edu.text.strip(),    "职位类别":cate.text.strip(),    "公司规模":com_scale.text.strip(),    "公司性质":com_nature.text.strip(),    "公司行业":com_cate.text.strip(),    "公司地址":com_address.text.strip()        }    return (data)#url = "http://jobs.zhaopin.com/145913042250065.htm"#get_link_info(url)    def get_links_all_info(job, city, page):    '''    @job:工作名称    @city:网址中城市名称    @page:表示前几页信息    将全部信息保存成矩阵形式,去除无用信息,并在当前目录下生成文件夹并此文件夹下把信息分类保存成.csv格式    '''    urls = get_links_from(job, city, page)    df = pd.DataFrame({                             "网址":[],    "工作名称":[],    "公司名称":[],    "公司网址":[],    "福利":[],    "月工资":[],    "发布日期":[],    "经验":[],    "人数":[],    "工作地点":[],    "工作性质":[],    "最低学历":[],    "职位类别":[],    "公司规模":[],    "公司性质":[],    "公司行业":[],    "公司地址":[],    "拉勾网":[],     "猎聘":[],    "应届生":[]                      })    links = []    for url in urls:        if "xiaoyuan" in url:            links.append(url)            columns = ['校园招聘地址']            labeled_df = pd.DataFrame(columns=columns, data=links)            #labeled_df.to_csv('{}\{}校园招聘{}地址.csv'.format(str(city)+str(job),str(city),str(job)))        else:            data = get_link_info(url)                    #print (data)            df = df.append(data,ignore_index=True)    return df    def remove_useless_info(df):     '''    #删除除"公司规模": "20人以下", "20-99人"; "最低学历": "博士","大专"; "经验": "3-5年","5-10年", "10年以上"的情况        @Dataframe筛选数据 http://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html    @df: 以矩阵形式存储爬取到的数据    定义一个列表,存储指定列类型,    删除需要删除的类型,    利用isin()函数保留剩下的数据     '''    '''    **************公司规模问题**************    **************最低学历问题**************    **************经验问题**************    '''    df = df[(df.经验 != '3-5年') & (df.经验 !='5-10年') & (df.经验 !='10年以上') & (df.最低学历 !='博士') & (df.最低学历 !='大专') & (df.公司规模 != '20人以下')]    return dfdef save_info(job, city, page,df):    '''    **************公司性质问题**************    '''    #print (list(df.公司性质))    '''    @df_pri = df[df.公司性质.isin('民营')]    @error:    only list-like objects are allowed to be passed to isin(), you passed a [str]    '''    df_pri = df[df.公司性质.isin(['民营'])]    df_com = df[df.公司性质.isin(['上市公司'])]    df_sta = df[df.公司性质.isin(['国企'])]    df_fore = df[df.公司性质.isin(['外商独资'])]    df_joint = df[df.公司性质.isin(['合资'])]    df_Gov = df[df.公司性质.isin(['事业单位'])]    df_stock = df[df.公司性质.isin(['股份制企业'])]        #    path = "E:\研究生阶段学习\编程语言\python\python爬虫\python源\招聘资料\智联招聘\job"    #获取当前路径    path = os.getcwd()    #自动生成文件夹并命名    os.mkdir(r'{}'.format(str(city)+str(job)))    df_pri.to_csv('{}\{}{}——民营.csv'.format(str(city)+str(job),str(city),str(job)))    df_com.to_csv('{}\{}{}——上市公司.csv'.format(str(city)+str(job),str(city),str(job)))    df_sta.to_csv('{}\{}{}——国企.csv'.format(str(city)+str(job),str(city),str(job)))    df_fore.to_csv('{}\{}{}——外商独资.csv'.format(str(city)+str(job),str(city),str(job)))    df_joint.to_csv('{}\{}{}——合资.csv'.format(str(city)+str(job),str(city),str(job)))    df_Gov.to_csv('{}\{}{}——事业单位.csv'.format(str(city)+str(job),str(city),str(job)))    df_stock.to_csv('{}\{}{}——股份制企业.csv'.format(str(city)+str(job),str(city),str(job)))    def get_recuite_info(job, city, page):    '''    获取招聘信息    '''    df = get_links_all_info(job, city, page)    df_cleaned = remove_useless_info(df)    save_info(job, city, page, df_cleaned)'''*********************获取招聘信息***************************'''get_recuite_info('嵌入式开发', '南京', 1)

总结:

1、这次主要是对爬取到的数据进行处理,这一块在机器学习问题中是数据预处理的内容。具体可以自行查找之一方面内容,还包括matplotlib的画图内容,可以实现数据可视化,很方便获取有用信息。

2、这一块应该还会再丰富,比如根据工资情况画图等等。但这一块只是为了学习python,为学习机器学习打基础用的。

3、有啥问题可以留言,写博客的目的,记录学习内容,更多的是供他人参考以及相互交流学习,CSDN上高手太多了,希望能得到他们评论指教。

原创粉丝点击