ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

51job爬虫项目

2021-02-17 11:01:39  阅读:226  来源: 互联网

标签:xpath information 项目 datalist 51job get 爬虫 data append


文章目录

引言

紧接着豆瓣爬虫的项目,该项目作为其后的练习和扩展,算是一个较为不错的上手练习。本文所涉及的是对于51job数据的爬取、解析和保存。对于数据可视化操作,在后续会持续更新,请关注!
在下面代码中有些函数内部调用了其他函数,需要补全各个部分的函数。如果需要源码请私信或者评论。

具体关于库的操作我选择了一些官方文档和较好理解的解读文章做链接,知识点比较全面请参考下列表。

数据爬取与解析

详情页链接的获取:selenium

selenium作为web自动化测试工具,目前在python爬虫中应用也越来越广泛。其主要应用原理是:通过完全模拟浏览器的操作,比如输入框输入、点击超链接元素、下拉滚动条等等来拿到js渲染之后的代码。
必要性:之前用的requests是对一个页面发送请求,只能获得当前加载出来的部分页面即最初的源代码,动态加载的数据是获取不到的,比如js渲染后的代码、下拉滚轮得到的数据和一些框内隐藏元素等等。
对于selenium的解读,请点击click

#获得所有网页详情页链接
def get_link():
    linklist = []
    #创建驱动器对象
    wd = webdriver.Chrome(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe')
    wd.implicitly_wait(5)
    #访问51job网站
    for i in range(1,21):
        wd.get(f"https://search.51job.com/list/010000,000000,0000,00,9,99,keyword,2,{i}.html?")
        #查找每每一条信息链接进入详情页
        joblists = wd.find_elements_by_xpath('//div[@class="j_joblist"]/div/a')
        for joblist in joblists:
            con_link = joblist.get_attribute("href")
            linklist.append(con_link)
    wd.quit()
    return linklist

注释:

  1. 代码中的 webdriver.Chrome,后面是自己所用的驱动器的本地地址。
  2. webdriver对象wd,调用 get方法,后面括号内为自己所要访问的网页链接地址。

数据爬取与解析:xpath

由于自己习惯于使用xpath方法解析,在此只做xpath解析的方法,如果需要re正则表达式或者BeautifulSoup解析,评论后续会更新。

def get_data():
    job_information = []
    url_lists = get_link()
    for i,url in enumerate(url_lists):
        datalist=[]
        header = {
            "User-Agent": "Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.150Safari/537.36"
        }
        response = requests.get(url, headers=header)
        try:
            html = response.content.decode("gbk")
            data = etree.HTML(html)
            link = url
            datalist.append(link)		#存入岗位链接
            title = data.xpath(r'//div[@class="cn"]/h1/@title')[0]
            datalist.append(title)		#存入岗位名称
            salary = data.xpath(r'//div[@class="cn"]/strong/text()')[0]
            datalist.append(salary)
            information = data.xpath(r'//p[@class="msg ltype"]/@title')[0]
            information = re.sub(r"\s+", "", information)  # 去除空白格
            experience = information.split("|")[1]
            datalist.append(experience)
            education = information.split("|")[2]
            datalist.append(education)
            num = information.split("|")[3]
            datalist.append(num)
            place = data.xpath(r'//p[@class="fp"]/text()')[0]
            datalist.append(place)
            treatment = data.xpath(r'//span[@class="sp4"]/text()')
            treatment = " ".join(treatment)
            datalist.append(treatment)
            print("-----第{}条------".format(i))
            job_information.append(datalist)
        except Exception as e:
            print("-----第{}条出错,原因是{}------".format(i,e))
        continue
    #print(job_information)		#测试
    return job_information

数据存储

Excel本地保存

def save_data_excel(datalist):
    workbook = xlwt.Workbook(encoding="gbk", style_compression=0)
    worksheet = workbook.add_sheet("python")
    col = ["链接", "岗位名称", "薪资", "工作经验", "学历", "招聘人数", "工作地点", "福利"]
    for i in range(0, 8):
        worksheet.write(0, i, col[i])
    for i in range(len(datalist)):
        for j in range(0, 8):
            worksheet.write(i+1,j,datalist[i][j])
    workbook.save("北京-python工作.xls")

Excel数据保存结果展示

在这里插入图片描述

sqlite数据库保存

在此部分只写了数据库保存的工作,数据库的初始化创建需函数sql_init需要添加即可使用。

def save_data_sql(datalist,dbpath):
    sql_init(dbpath)
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()
    for data in datalist:
        for index in range(len(data)):
            data[index] = '"' + data[index] + '"'
        sql = '''
        insert into job_information(
            link,title,salary,experience,education,num,place,treatment)
            values(%s)'''%",".join(data)
        #print(sql)     #测试sql语句是否正确
        cur.execute(sql)
        conn.commit()
    cur.close()
    conn.close()

sqlite数据库保存结果展示

在这里插入图片描述

数据可视化

null,期待后续!

标签:xpath,information,项目,datalist,51job,get,爬虫,data,append
来源: https://blog.csdn.net/heartbeat196/article/details/113819318

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有