游戏攻略网
当前位置: 首页 游戏攻略

51job爬虫(爬取前程无忧51job的职位信息并存入mysql数据库)

时间:2023-06-11 作者: 小编 阅读量: 1 栏目名: 游戏攻略

继昨天mysql数据库操作之后,今天则给大家分享一下python3操作爬取前程无忧,51job职位信息并存入自己所建立的mysql数据库里。数据重复则自动去重。

继昨天mysql数据库操作之后,今天则给大家分享一下python3操作爬取前程无忧,51job职位信息并存入自己所建立的mysql数据库里。数据重复则自动去重。

准备工作注意:我们这里以搜索“python”职位为例

爬取数据保存到excel完整代码如下,代码里注释讲解的很清楚了,不懂的话可以私信小编领取资料。

# -*- coding:utf-8 -*-import re # 用来做正则匹配用import requests # 用来做网络请求用import xlwt # 用来创建excel文档并写入数据# 要查询的职位key = 'python'# 获取原码def get_content(page): headers = {'Host': 'search.51job.com', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} url = 'http://search.51job.com/list/000000,000000,0000,00,9,99,'key',2,'str( page)'.html' r = requests.get(url, headers, timeout=10) s = requests.session() s.keep_alive = False r.encoding = 'gbk' html = r.text return html# 匹配规则def get(html): reg = re.compile( r'>.*? <a target="_blank" .*? <span ><a target="_blank" .*?<span >(.*?)</span>.*?<span >(.*?)</span>.*? <span >(.*?)</span>', re.S) # 匹配换行符 items = re.findall(reg, html) return itemsdef excel_write(items, index): # 爬取到的内容写入excel表格 for item in items: # 职位信息 for i in range(0, 5): # print item[i] ws.write(index, i, item[i]) # 行,列,数据 print(index) index= 1newTable = "test.xls" # 表格名称wb = xlwt.Workbook(encoding='utf-8') # 创建excel文件,声明编码ws = wb.add_sheet('sheet1') # 创建表格headData = ['职位', '公司', '地址', '薪资', '日期'] # 表头部信息for colnum in range(0, 5): ws.write(0, colnum, headData[colnum], xlwt.easyxf('font: bold on')) # 行,列# 查询1-10页的数据,这里的10可以改成你想查询多少页for each in range(1, 2): index = (each - 1) * 501 excel_write(get(get_content(each)), index)wb.save(newTable) # 数据保存到excel表格

1、运行上面代码控制台输出如下,代表我们成功保存了44条数据。

2、再来看下开发工具同目录下多了一个test.xls文件

3、打开test.xls文件,可以看到我们成功保存了抓取到的数据到excel文件。这就为我们后期做数据分析打好了准备

一、保存到mysql数据完整代码

注意:在复制代码或者阅读代码的时候请仔细阅读理解

# -*- coding:utf-8 -*-import re # 用来做正则匹配用import requests # 用来做网络请求用import xlwt # 用来创建excel文档并写入数据import pymysql # 用来操作数据库# 要查询的职位key = 'python'# 获取原码def get_content(page): headers = {'Host': 'search.51job.com', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} url = 'http://search.51job.com/list/000000,000000,0000,00,9,99,'key',2,'str( page)'.html' r = requests.get(url, headers, timeout=10) s = requests.session() s.keep_alive = False r.encoding = 'gbk' html = r.text return html# 匹配规则def get(html): reg = re.compile( r'>.*? <a target="_blank" .*? <span ><a target="_blank" .*?<span >(.*?)</span>.*?<span >(.*?)</span>.*? <span >(.*?)</span>', re.S) # 匹配换行符 items = re.findall(reg, html) return items# 第一种方式: =============数据存入excel表格# def excel_write(items, index):# # 爬取到的内容写入excel表格# for item in items: # 职位信息# for i in range(0, 5):# # print item[i]# ws.write(index, i, item[i]) # 行,列,数据# print(index)# index= 1### newTable = "test.xls" # 表格名称# wb = xlwt.Workbook(encoding='utf-8') # 创建excel文件,声明编码# ws = wb.add_sheet('sheet1') # 创建表格# headData = ['职位', '公司', '地址', '薪资', '日期'] # 表头部信息# for colnum in range(0, 5):# ws.write(0, colnum, headData[colnum], xlwt.easyxf('font: bold on')) # 行,列# for each in range(1, 10): # 查询1-10页的数据,这里的10可以改成你想查询多少页# index = (each - 1) * 501# excel_write(get(get_content(each)), index)# wb.save(newTable) # 数据保存到excel表格# 第二种方式 =================数据存入数据库# 操作数据库的类class MysqlCommand(object): # 类的初始化 def __init__(self): self.host = 'localhost' self.port = 3306 # 端口号 self.user = 'root' # 用户名 self.password = "qcl123" # 密码 self.db = "test" # 库 self.table = "shuju" # 表 # 链接数据库 def connectMysql(self): try: self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.password, db=self.db, charset='utf8') self.cursor = self.conn.cursor() except: print('connect mysql error.') # 插入数据,插入之前先查询是否存在,如果存在就不再插入 def insertData(self, my_dict): table = self.table # 要操作的表格 # 注意,这里查询的sql语句id=' %s '中%s的前后要有空格 sqlExit = "SELECT gongsi FROM "table" WHERE gongsi = ' %s '" % (my_dict['gongsi']) res = self.cursor.execute(sqlExit) if res: # res为查询到的数据条数如果大于0就代表数据已经存在 print("数据已存在", res) return 0 # 数据不存在才执行下面的插入操作 try: cols = ', '.join(my_dict.keys()) # 用,分割 values = '"," '.join(my_dict.values()) sql = "INSERT INTO "table" (%s) VALUES (%s)" % (cols, '"'values'"') # 拼装后的sql如下 # INSERT INTO home_list (img_path, url, id, title) VALUES ("https://img.huxiucdn.com.jpg"," https://www.huxiu.com90.html"," 12"," ") try: result = self.cursor.execute(sql) insert_id = self.conn.insert_id() # 插入成功后返回的id self.conn.commit() # 判断是否执行成功 if result: print("插入成功", insert_id) return insert_id1 except pymysql.Error as e: # 发生错误时回滚 self.conn.rollback() # 主键唯一,无法插入 if "key 'PRIMARY'" in e.args[1]: print("数据已存在,未插入数据") else: print("插入数据失败,原因 %d: %s" % (e.args[0], e.args[1])) except pymysql.Error as e: print("数据库错误,原因%d: %s" % (e.args[0], e.args[1])) # 查询最后一条数据的id值 def getLastId(self): sql = "SELECT max(id) FROM "self.table try: self.cursor.execute(sql) row = self.cursor.fetchone() # 获取查询到的第一条数据 if row[0]: return row[0] # 返回最后一条数据的id else: return 0 # 如果表格为空就返回0 except: print(sql' execute failed.') def closeMysql(self): self.cursor.close() self.conn.close() # 创建数据库操作类的实例mysqlCommand = MySQLCommand()mysqlCommand.connectMysql()def savedb(items, index): for item in items: # 职位信息 # 只选择长度大于0的结果 if len(item) > 0: # 这里每次查询数据库中最后一条数据的id,新加的数据每成功插入一条id1 dataCount = int(mysqlCommand.getLastId())1 # 职位 try: zhiwei = item[0] except Exception: zhiwei = "" # 公司 try: gongsi = item[1] except Exception: gongsi = "" # 地址 try: dizhi = item[2] except Exception: dizhi = "" # 薪资 try: xinzi = item[3] except Exception: xinzi = "" # 日期 try: riqi = item[4] except Exception: riqi = "" # 把爬取到的每条数据组合成一个字典用于数据库数据的插入 news_dict = { "id": str(dataCount), "zhiwei": zhiwei, "gongsi": gongsi, "dizhi": dizhi, "xinzi": xinzi, "riqi": riqi, } try: # 插入数据,如果已经存在就不在重复插入 res = mysqlCommand.insertData(news_dict) if res: dataCount = res except Exception as e: print("插入数据失败", str(e)) # 输出插入失败的报错语句for each in range(1, 2): # 查询1-10页的数据,这里的10可以改成你想查询多少页 index = (each - 1) * 501 savedb(get(get_content(each)), index) # 数据存入mysql数据库mysqlCommand.closeMysql() # 最后一定要要把数据关闭dataCount = 0class MySQLCommand(object): # 类的初始化 def __init__(self): self.host = 'localhost' self.port = 3306 # 端口号 self.user = 'root' # 用户名 self.password = "qcl123" # 密码 self.db = "home" # 库 self.table = "home_list" # 表 # 链接数据库 def connectMysql(self): try: self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.password, db=self.db, charset='utf8') self.cursor = self.conn.cursor() except: print('connect mysql error.') # 插入数据,插入之前先查询是否存在,如果存在就不再插入 def insertData(self, my_dict): table = self.table # 要操作的表格 # 注意,这里查询的sql语句url=' %s '中%s的前后要有空格 sqlExit = "SELECT url FROM "table" WHERE url = ' %s '" % (my_dict['url']) res = self.cursor.execute(sqlExit) if res: # res为查询到的数据条数如果大于0就代表数据已经存在 print("数据已存在", res) return 0 # 数据不存在才执行下面的插入操作 try: cols = ', '.join(my_dict.keys()) # 用,分割 values = '"," '.join(my_dict.values()) sql = "INSERT INTO "table" (%s) VALUES (%s)" % (cols, '"'values'"') # 拼装后的sql如下 # INSERT INTO home_list (img_path, url, id, title) VALUES ("https://img.huxiucdn.com.jpg"," https://www.huxiu.com90.html"," 12"," ") try: result = self.cursor.execute(sql) insert_id = self.conn.insert_id() # 插入成功后返回的id self.conn.commit() # 判断是否执行成功 if result: print("插入成功", insert_id) return insert_id1 except pymysql.Error as e: # 发生错误时回滚 self.conn.rollback() # 主键唯一,无法插入 if "key 'PRIMARY'" in e.args[1]: print("数据已存在,未插入数据") else: print("插入数据失败,原因 %d: %s" % (e.args[0], e.args[1])) except pymysql.Error as e: print("数据库错误,原因%d: %s" % (e.args[0], e.args[1])) # 查询最后一条数据的id值 def getLastId(self): sql = "SELECT max(id) FROM "self.table try: self.cursor.execute(sql) row = self.cursor.fetchone() # 获取查询到的第一条数据 if row[0]: return row[0] # 返回最后一条数据的id else: return 0 # 如果表格为空就返回0 except: print(sql' execute failed.') def closeMysql(self): self.cursor.close() self.conn.close() # 创建数据库操作类的实例

1保存到数据库的数据如下:

到这里就实现了python爬虫功能。

Python3操作数据库分享到这里就分享完了,那个如果有不懂的可以仔细阅读代码。也可以私信小编领取Python3操作相关资料。

如何获取

关注小编

私信小编:回复 Python 即可领取资料

头条怎么私信

点击头条,点击右下角“我的”

在个人界面点击关注,如果你关注了,点击“小杆货”就可以了

回复:python就可以了 但是你要先关注我哦~

,
    推荐阅读
  • steam棋牌游戏推荐(幸运之夜新版本亮相TGC)

    steam棋牌游戏推荐12月1日,2017腾讯游戏嘉年华正式在成都开幕,腾讯的VR社交游戏《幸运之夜》在现场发布了最新版本。VR《幸运之夜》在TGC2017上惊艳亮相《幸运之夜》新版本发布邀请好友一起游戏今年7月底,《幸运之夜》正式在Steam发布,并推出了首款游戏作品“德州扑克”。今年的TGC2017现场,《幸运之夜》全新版本便带来了对互动性方面的提升。

  • 儿童睡前故事卖火柴的小女孩大全(卖火柴的小女孩)

    在长发公主的故事里,兔子小姐变成了手持宝剑的骑士,穿过了山川和河流,战胜了地狱恶犬,最终救出了长着一头金黄色长发的熊猫先生。随着一阵空间的波动,熊猫先生和兔子小姐来到了冰天雪地的圣诞节。小女孩被这突如其来的变化惊呆了。熊猫先生没有回答,轻轻摸了摸小女孩的头。小女孩点燃了第二根火柴。熊猫先生和兔子小姐则来到壁炉前,商量起小女孩最后一个愿望。熊猫先生蹲下来,握起小女孩的手。

  • 怎样做ppr管快一点(PPR管安装方法及技巧)

    怎样做ppr管快一点PPR管安装方法及技巧首先准备好需要的材料:热熔机,小剪刀,ppr管,管件,手巾。一定要根据自己热熔ppr管的口径,准备相应的热熔头。清洁:清洁管材与管件的焊接段部位,建议用95%浓度酒精擦净。在熔接时间内迅速的将管材无旋转的垂直插入管件中,并维持5秒以上,然后按相应冷却时间冷却。热熔后做到横平竖直,美观大方。

  • 大托特包搭配技巧(大托特包搭配技巧简述)

    西装外套+托特包复古时尚的格子,由黑白交错的条纹形成,文艺而又端庄搭配撞色托特包,优雅而不失俏皮,让气场变得灵动起来内搭白色连帽卫衣,减龄又可爱,接下来我们就来聊聊关于大托特包搭配技巧?大托特包搭配技巧西装外套+托特包复古时尚的格子,由黑白交错的条纹形成,文艺而又端庄。衬衫+托特包白色的衬衫休闲慵懒,给人一种空灵的感觉以及干净纯粹的气质。

  • 刘涛电视剧口碑(电视剧景气指数第一)

    还记得3月份刘涛在和周渝民主演的《大宋宫词》中扮嫩出演少妇被很多观众吐槽。万万没想到时隔数月,刘涛带着她的新剧《星辰大海》杀回来了。目前主要的剧情线在刘涛饰演的女主简爱身上。因为小时候意外发现母亲出轨的事,得知真相的父亲激愤之下杀死母亲并自杀,简爱因此成为了一个孤女。逃出傻子家的简爱在与姑姑的争执中误伤姑姑,从此开启逃命生涯。简爱从面馆辞职走投无路,误打误撞进入大公司之后面临着同事的故意刁难。

  • 外墙装修材料有哪些 外墙装修材料有哪些类型

    外墙涂料具有装饰性良好、耐污染耐老化以及施工维修容易和价格合理的特点。一般来说釉面外墙砖有亚光面与无光面两大类。它的装饰的效果也不错,有柚木色、深灰色等等可供选择。由于它的表面的肌理很清晰,所以色泽漂亮且装饰性极强。本站,中国知名大型装修平台,装修领导品牌。

  • 世界上有哪些花(世界上有哪些花 名字)

    瓜叶菊、香豌豆、夏兰、石竹、石蒜、荷花、翠菊、睡莲、福禄考、晚香玉、万寿菊、千日红、建兰、铃兰、报岁兰、香堇、大岩桐、水仙、小草兰、瓜叶菊、蒲包花、免子花、入腊红、三色堇、百日草、鸡冠花、一串红。孔雀草、大波斯菊、金盏菊、非洲凤仙花、菊花、非洲菊、观赏凤梨类、射干、非洲紫罗兰、天堂鸟、炮竹红、菊花、康乃馨、红掌、满天星、星辰花、三角梅、虞美人。

  • 长歌行李长歌母亲是谁杀的(长歌行李长歌的简介)

    下面更多详细答案一起来看看吧!长歌行李长歌母亲是谁杀的《长歌行》李长歌母亲是自杀的。李长歌,太子李建成之女,生母则是回纥王族。父母手足均死于玄武门之变,满怀愤恨的长歌凭高超武艺逃出皇宫,并在追捕过程中制造“坠崖假死”而逃生,其后女扮男装隐瞒身份流落民间,一心只想为父母复仇,在家和国的利害冲突中,最后放弃复仇,和阿诗勒隼一起成为了民族和解的使者。

  • 什么时候喝蛋白粉增肌效果最好(什么时候喝蛋白粉增肌效果最好)

    从长远来看,这种方法被证明可以促使肌肉明显增长。如果摄入量超过一定的阈值,蛋白质的合成就会受限。如果是以乳清饮料的形式摄入乳清蛋白,运动者可以在运动结束后立即饮用。按每公斤体重1克的标准,在健身前后立即摄入以及在运动后1小时内摄入可快速吸收的碳水化合物,可以明显抑制肌肉分解,并大大促进肌肉快速和明显的增长。在这种情况下,大量分泌的胰岛素促进了氨基酸向工作中的肌肉运输,为蛋白质合成奠定基础。

  • 窦骁周冬雨山楂树之恋结局(周冬雨18岁第一次出演)

    周冬雨18岁第一次出演要说最近最火的电影,非《少年的你》莫属,上映14天,已经收获了12.45亿的票房成绩,成为现阶段最强的票房黑马而作为该片主演的周冬雨和易烊千玺,也凭借在该片中的精彩演出,演技得到大众的进一步认可作为“。