③修改代码,分别获取关键字是python、java,右边选择北京、上海、广州、深圳四个城市时前10页的招聘数据,用正则表达式解析获取的数据,按照以下格式分别把数据存储在文件和数据库中
关键字 工作地点 薪资min 薪资max 
java   上海 1.5   1.6   
java   深圳   1.5    3    
java   上海   0.8    1    
python 北京   1.5    2.5   
python 广州    1.5    2.2   
提示:网页上的数据有两处需要处理:
一是工作地点,原始内容可能是上海-浦东新区,只保留前面的城市名上海
二是薪资,原始内容是1.2-1.8万/月或10-20万/年,把单位换算成一致的,并且把最小值和最大值分开存放

这次的作业是提取网页招聘信息并且保存在数据库中,数据库其实好办,主要是提取信息+处理信息;

首先关键字和地点都好处理,所以关键是薪资的提取和处理方式

这里也是要分为两种方式去做:

①将薪资部分全部提取后处理;②直接利用正则表达式提取更确切的数据再进行处理

先说一下我用的第一种方式:(下面基本上是核心代码)

1.设置所需变量

#我看了下初步处理信息,薪资一般有四种单位形式,所以分别进行变量设置;当然还有一种是面议不写薪资的,
#处理的时候else一下就可以
sala1="元/天"
sala2="千/月"
sala3="万/月"
sala4="万/年"
#这里列表h1存放薪资max和min
h1={}

2.建立提取函数

#薪资函数
def salary(s):
#这里的关键是利用maketrans函数,将单位替换为空,使得原数据没有单位,只留下数据,在进行薪资处理if(sala1 in s):s=s.translate(str.maketrans('', '', sala1))
#这种对应为200元/天这种类型的,去掉单位后只留下200,直接进行万/月单位转换即可h[0](最小值)h[1]#(最大值)即可hl[0]=float(s)*30/10000hl[1]=hl[0]elif(sala2 in s):s=s.translate(str.maketrans('', '', sala2))
#这种对应0.5-0.7类型的,要进行分片处理存到新的列表里再进行转换即可t=s.split('-')hl[0]=float(t[0])/10hl[1]=float(t[1])/10elif(sala3 in s):s=s.translate(str.maketrans('', '', sala3))t=s.split('-')hl[0]=float(t[0])hl[1]=float(t[1])elif(sala4 in s):s=s.translate(str.maketrans('', '', sala4))t=s.split('-')hl[0]=float(t[0])/12hl[1]=float(t[1])/12else:hl[0]=0.0;hl[1]=0.0;

这里的maketrans函数有仨参数(a,b,c)-----a替换为b;c对应的变为空;===》这个可以自行百度下

分片处理也很重要,要存到新的列表里,因为s进行分片后直接输出s会发现还是原来样子,所以要进行赋值才可以

当然也可以直接s=s.split(),意思都是一样的

而对于关键字/地点提取呢,你可以针对要求直接在正则表达式里进行或运算(java|python);(北京|广州|上海|深圳)

慢着!!!!!!!!!!上面的代码是不全面的,这次更新下代码(因为原来代码只考虑了200元/天,只考虑了元/天才会有一个数值的情况,所以更新下)

def salary(s):if('-' in s):if(sala1 in s):s=s.translate(str.maketrans('', '', sala1))t=s.split('-')hl[0]=float(t[0])*30/10000hl[1]=float(t[0])*30/10000                  elif(sala2 in s):s=s.translate(str.maketrans('', '', sala2))t=s.split('-')hl[0]=float(t[0])/10hl[1]=float(t[1])/10elif(sala3 in s):s=s.translate(str.maketrans('', '', sala3))t=s.split('-')hl[0]=float(t[0])hl[1]=float(t[1])elif(sala4 in s):s=s.translate(str.maketrans('', '', sala4))t=s.split('-')hl[0]=float(t[0])/12hl[1]=float(t[1])/12else:hl[0]=0.0;hl[1]=0.0;else:if(sala1 in s):s=s.translate(str.maketrans('', '', sala1))hl[0]=float(s)*30/10000hl[1]=hl[0]elif(sala2 in s):s=s.translate(str.maketrans('', '', sala2))hl[0]=float(t[0])/10hl[1]=hl[0]elif(sala3 in s):s=s.translate(str.maketrans('', '', sala3))hl[0]=float(t[0])hl[1]=hl[0]elif(sala4 in s):s=s.translate(str.maketrans('', '', sala4))hl[0]=float(t[0])/12hl[1]=hl[0]else:hl[0]=0.0;hl[1]=0.0;

当然也可以提取之后设置函数再提取我们所需要的:

#设置变量
sh='上海'
gz='广州'
bj='北京'
sz='深圳'python='python'
java='java'
#设置关键字、地点处理函数
def symb(s):if('python' in s or 'Python'in s or 'PYTHON'in s):list[0]='python'elif('java' in s or 'JAVA'in s or 'Java'in s):list[0]='java'else:return 0
def didian(s):if(gz in s):list[1]=gzelif(sh in s):list[1]=shelif(bj in s):list[1]=bjelif(sz in s):list[1]=szelse:return 0

显而易见正则表达式里的或运算较为简单,当然那也得是数据较少的时候,如果嘟嘟噜噜一大堆,还是函数好使一点儿

当然这也只是我目前的看法

接下来就是数据库处理,很简单,直接贴代码

#多页处理,传入到数据库
conn=sqlite3.connect('py.db')
print("Opened databases successfully");
c=conn.cursor()
c.execute('''create table job5(
"关键字" char(50) not null,
"工作地点" char(50) not null,
"薪资min(万/月)" float,
"薪资max(万/月)" float
);''')
for  j in range(1,11):print("正在爬取第"+str(j)+"页数据...")html=get_content(j)#调用获取网页原码for i in get(html):symb(i[0])didian(i[1])salary(i[2])c.execute("insert into job5 values('%s','%s',%f,%f)"%(list[0],list[1],hl[0],hl[1]))#c.execute("insert into job2 values('java','深圳',1.5,3)")conn.commit()print("已经添加第"+str(j)+"页数据到数据库...")conn.close()

当然啦这里传入的参数变量要依据正则表达式来

over

周末把正则表达式也就是②方法给搞明白

毕竟正则表达式用好了就会方便很多

python--爬虫51job(3.1)相关推荐

  1. Python爬虫--51job爬取岗位信息并写入txt文件

    有借鉴有修改 """ user:long """ import re import time from bs4 import Beautif ...

  2. Python爬虫51job职位

    import urllib.request #请求 import re import xlwt import DBUtilsdef getContent(job,pag):hd = {"Us ...

  3. python爬虫之51job工作搜索

    简介   大多数情况下我们通过urllib2等模块可以对单纯的html进行爬取分析,但是当我们遇到的页面是js渲染的,我们需要去分析一个一个后台的请求,这就太蛋疼了.若我们使用像浏览器一样的工具来处理 ...

  4. Python爬虫,爬取51job上有关大数据的招聘信息

    Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...

  5. python爬虫之搜索51job并存入mysql数据库

    简介 在python爬虫之51job工作搜索我们只是通过python函数将其简单打印,在此我们将其进行封装成类,打印并写入mysql数据库中. 因此我们首先需要设计mysql的库和表结构,在此我们只用 ...

  6. python爬虫小项目挣钱兼职,python程序员兼职平台

    python爬虫去哪接单 python爬虫接单的方式有两种一.接定制需求的单子爬虫定制的需求其实很多,比如 "爬取某某电商网站的评论",这类需求一般是按照爬取数据量的大小来收费,价 ...

  7. [B站视频]Python爬虫技术5天速成

    [B站视频]Python爬虫技术5天速成 课程介绍 1.Python基础概述 课堂作业1:IF语句实现石头剪子布 课堂作业2:用For和While循环打印九九乘法表 字符串常见操作(只介绍部分常用到的 ...

  8. python爬虫实战之多线程爬取前程无忧简历

    python爬虫实战之多线程爬取前程无忧简历 import requests import re import threading import time from queue import Queu ...

  9. python爬虫工程师工资-通过自学找一份Python爬虫工程师的工作

    最近忙于准备婚礼,博客没能稳定更新.之前为了找工作,写了很多爬虫实战的文章.现在工作找到了,我想对这段时间的经历做一个总结,打算用三篇文章完成这个事情: 本文.交代一下我的背景.自学了点什么(看了什么 ...

  10. python爬虫 requests+lxml爬取前程无忧网之模拟浏览器登录

    "前程无忧"(Nasdaq: JOBS) : 是国内一个集多种媒介资源优势的专业人力资源服务机构,创始人为甄荣辉.它集合了传统媒体.网络媒体及先进的信息技术,加上一支经验丰富的专业 ...

最新文章

  1. AICompiler动态shape编译框架
  2. golang 警告提示 Error string should not be capitalized or end with punctuation mark
  3. qdbus 复杂类型
  4. 探究Softmax的替代品:exp(x)的偶次泰勒展开式总是正的
  5. android 手机自动化测试,Appium进行Android手机真机自动化测试
  6. awk命令和grep命令的使用
  7. 2021年黑龙江高考成绩查询,黑龙江省招生考试信息港:2021年黑龙江高考成绩查询入口、查分系统...
  8. proteus中的米字(14段)数码管用法
  9. LG-P2342 叠积木
  10. iOS中什么是superView?(新手概念简述版)
  11. Ansible-template模块使用(jinjia2模板)
  12. 领取CPS外卖红包攻略及小程序项目源码
  13. Alphalens笔记
  14. 《最强大脑》新科世界脑王:其实我是教小学数学的
  15. 数据结构Python版--线性结构
  16. 势流理论 matlab程序,势流理论 1.ppt
  17. Element UI DatePicker 日期选择器
  18. Fireworks 8 编辑图片使用技巧1
  19. PVI(pvifa计算公式)
  20. Java开发必须要会!java自动填写网页表单

热门文章

  1. 全面了解WDM波分复用
  2. 51单片机LCD1602液晶屏调试工具
  3. 基于单片机的超市储物柜设计_基于80C51单片机的电子储物柜系统
  4. 用python代码实现一个简单的FSA(有限状态自动机)
  5. 利用Excel宏中文转拼音方法
  6. TestCenter测试管理工具功能详解六(K)
  7. matlab在点内加入权值,matlab权值矩阵
  8. 这2个PDF转Word免费不限页数工具很多人没用过
  9. 一次 TLS SNI 问题
  10. nginx 三级域名泛解析并指向某文件 带参数