杭州python爬虫招聘_用Python爬取智联招聘信息做职业规划

上学期在实验室发表时写了一个爬取智联招牌信息的爬虫。

操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化

1.数据爬取

1 job = "通信工程师" #以爬取通信工程师职业为例

2 leibie = '1'

3 url_job =[]4

5 for page in range(99):6 x = str(page) #爬取的页码

7 p = str(page+1)8 print("正在抓取第一"+p+"页...\n") #提示

9 url = "http://sou.zhaopin.com/jobs/searchresult.ashx?in=210500%3B160400%3B160000%3B160500%3B160200%3B300100%3B160100%3B160600&jl=上海%2B杭州%2B北京%2B广州%2B深圳&kw="+job+"&p="+x+"&isadv=0" #url地址,此处为示例,可更据实际情况更改

10 r = requests.post(url) #发送请求

11 data =r.text12 pattern=re.compile('ssidkey=y&ss=201&ff=03" href="(.*?)" target="_blank"',re.S) #正则匹配出招聘信息的URL地址

13 tmp_job =re.findall(pattern,data)14 url_job.extend(tmp_job) #加入队列

上面代码以上海、杭州、北京、广州、深圳的“通信工程师”为例实现爬取了智联招聘上每一则招聘信息的URL地址。

(示例)在智联招聘上如下图所示的招聘地址:

818399-20170222210513429-1260889439.png

2.数据结构化

获得URL之后,就通过URL,发送get请求,爬取每一则招聘的数据,然后使用Xpath或者正则表达式把所有数据结构化,代码如下:

1 for x inurl_job:2 print(x)3 d = requests.post(x) #发送post请求

4 zhiwei =d.text5 selector = etree.HTML(zhiwei) #获得招聘页面源码

6 name = selector.xpath('//div[@class="inner-left fl"]/h1/text()') #匹配到的职业名称

7 mone = selector.xpath('//div[@class="terminalpage clearfix"]/div[@class="terminalpage-left"]/ul[@class="terminal-ul clearfix"]/li[1]/strong/text()') #匹配到该职位的月薪

8 adress = selector.xpath('//div[@class="terminalpage clearfix"]/div[@class="terminalpage-left"]/ul[@class="terminal-ul clearfix"]/li[2]/strong/a/text()') #匹配工作的地址

9 exp = selector.xpath('//div[@class="terminalpage clearfix"]/div[@class="terminalpage-left"]/ul[@class="terminal-ul clearfix"]/li[5]/strong/text()') #匹配要求的工作经验

10 education = selector.xpath('//div[@class="terminalpage clearfix"]/div[@class="terminalpage-left"]/ul[@class="terminal-ul clearfix"]/li[6]/strong/text()') #匹配最低学历

11 zhiweileibie = selector.xpath('//div[@class="terminalpage clearfix"]/div[@class="terminalpage-left"]/ul[@class="terminal-ul clearfix"]/li[8]/strong/a/text()') #匹配职位类别

12

13 match = re.compile('(.*?)',re.S)#此处为匹配对职位的描述,并且对其结构化处理

14 description =re.findall(match,zhiwei)15 des =description[0]16 des = filter_tags(des) #filter_tags此函数下面会讲到

17 des =des.strip()18 des = des.replace(' ','')19 des = des.rstrip('\n')20 des = des.strip('\t\n')21 try: #尝试判断是否为最后一则

22 name =to_str(name[0])23 mone =to_str(mone[0])24 adress =to_str(adress[0])25 exp =to_str(exp[0])26 education =to_str(education[0])27 zhiweileibie =to_str(zhiweileibie[0])28 des =to_str(des)29 exceptException as e:30 continue

上面代码中使用了filter_tags函数,此函数的目的在于把HTML代码替换实体,并且去掉各种标签、注释和换行空行等,该函数代码如下:

1 deffilter_tags(htmlstr):2 #先过滤CDATA

3 re_cdata=re.compile('//]*//\]\]>',re.I) #匹配CDATA

4 re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script

5 re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I)#style

6 re_br=re.compile('
')#处理换行

7 re_h=re.compile('?\w+[^>]*>')#HTML标签

8 re_comment=re.compile('')#HTML注释

9 s=re_cdata.sub('',htmlstr)#去掉CDATA

10 s=re_script.sub('',s) #去掉SCRIPT

11 s=re_style.sub('',s)#去掉style

12 #s=re_br.sub('\n',s)#将br转换为换行

13 s=re_h.sub('',s) #去掉HTML 标签

14 s=re_comment.sub('',s)#去掉HTML注释

15 #去掉多余的空行

16 blank_line=re.compile('\n+')17 s=blank_line.sub('\n',s)18 #s=replaceCharEntity(s)#替换实体

19 return s

3.存入数据库

上面的代码已经帮我们实现根据数据表中设置的字段清洗好杂乱无章的数据了,之后只要在循环中把结构化的数据存入数据库即可。

具体代码如下:

1 conn = pymysql.connect(host='127.0.0.1',user='root',passwd='××××××',db='zhiye_data',port=3306,charset='utf8')2 cursor=conn.cursor()3

4 sql='INSERT INTO `main_data_3` (`name`,`mone`,`adress`,`exp`,`education`,`zhiweileibie`,`description`,`leibie`,`company_range`,`company_kind`) VALUES(\''+name+'\',\''+mone+'\',\''+adress+'\',\''+exp+'\',\''+education+'\',\''+zhiweileibie+'\',\''+des+'\',\''+leibie+'\',\'a\',\'b\');'#%(name,mone,adress,exp,education,zhiweileibie,des,leibie)

5

6 #print(sql)

7 try:8 cursor.execute(sql)9 conn.commit()10 print(cursor.rowcount)11 exceptException as e:12 print(e)13 cursor.close()14 conn.close()

存入数据库中的具体数据示例如下图:

818399-20170222223201413-1749098127.png

4.数据统计

首先对职位的描述进行分词统计,以便分析出该职业所需要的技能。

对职位描述进行分词我先使用的是SAE的分词服务,示例代码(PHP)如下(仅供参考):

1 public functionget()2 {3 $h = D('hotword');4 $data = $h->get_des();5

6 foreach ($data as $k => $v) {7 $content = POST("http://segment.sae.sina.com.cn/urlclient.php?encoding=UTF-8&word_tag=1","context=".$v['description']);8 $text = json_decode($content,true);9 if (empty($text[0]['word_tag'])) {10 exit;11 }12 $sta = $h->hotword_save($text);13 dump($sta);14 }15 }

向服务地址发送post请求,会以JSON格式返回具体的分析结果。存入数据库(如下图):

818399-20170222224246991-108316940.png

对每个词的出现频率进行统计,去掉一些无关的和通用的词之后就是所需职业技能的关键词。

然后我也对各个地区各个职业的月薪、数量等也进行栏统计。

下面放几张结果的示例图(不清晰的截图,,,见谅哈):

818399-20170222224945273-192613040.png

818399-20170222225023070-762771137.png

818399-20170222225049851-261483436.png

下图为不同职业对学历要求的统计图

818399-20170222225121460-1845149253.png

下图为Python开发出现最多的技能词

818399-20170222225151601-1769040769.png

下图为C开发出现最多的技能词

818399-20170222225229226-1082221624.png

最后的分析我这里就不多说了,聪明的人看图都应该能看懂了哈。

CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b或2023b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪(CEEMDAN)、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 1. EMD(经验模态分解,Empirical Mode Decomposition) 2. TVF-EMD(时变滤波的经验模态分解,Time-Varying Filtered Empirical Mode Decomposition) 3. EEMD(集成经验模态分解,Ensemble Empirical Mode Decomposition) 4. VMD(变分模态分解,Variational Mode Decomposition) 5. CEEMDAN(完全自适应噪声集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 6. LMD(局部均值分解,Local Mean Decomposition) 7. RLMD(鲁棒局部均值分解, Robust Local Mean Decomposition) 8. ITD(固有时间尺度分解,Intrinsic Time Decomposition) 9. SVMD(逐次变分模态分解,Sequential Variational Mode Decomposition) 10. ICEEMDAN(改进的完全自适应噪声集合经验模态分解,Improved Complementary Ensemble Empirical Mode Decomposition with Adaptive Noise) 11. FMD(特征模式分解,Feature Mode Decomposition) 12. REMD(鲁棒经验模态分解,Robust Empirical Mode Decomposition) 13. SGMD(辛几何模态分解,Spectral-Grouping-based Mode Decomposition) 14. RLMD(鲁棒局部均值分解,Robust Intrinsic Time Decomposition) 15. ESMD(极点对称模态分解, extreme-point symmetric mode decomposition) 16. CEEMD(互补集合经验模态分解,Complementary Ensemble Empirical Mode Decomposition) 17. SSA(奇异谱分析,Singular Spectrum Analysis) 18. SWD(群分解,Swarm Decomposition) 19. RPSEMD(再生相移正弦辅助经验模态分解,Regenerated Phase-shifted Sinusoids assisted Empirical Mode Decomposition) 20. EWT(经验小波变换,Empirical Wavelet Transform) 21. DWT(离散小波变换,Discraete wavelet transform) 22. TDD(时域分解,Time Domain Decomposition) 23. MODWT(最大重叠离散小波变换,Maximal Overlap Discrete Wavelet Transform) 24. MEMD(多元经验模态分解,Multivariate Empirical Mode Decomposition) 25. MVMD(多元变分模态分解,Multivariate Variational Mode Decomposition)
好的,您想要了解如何使用 Python 爬取智联招聘网站上的工作岗位信息对吗? 首先,我们可以使用 Python 中的 requests 库来向智联招聘网站发送 HTTP 请求,从而获取页面内容。然后,我们可以使用 BeautifulSoup 库来解析页面内容,提取出我们需要的信息。 以下是一个示例代码,用于爬取智联招聘网站上的 Python 工程师工作岗位信息: ```python import requests from bs4 import BeautifulSoup url = 'https://fe-api.zhaopin.com/c/i/sou?pageSize=60&cityId=489&salary=0,0&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=Python&kt=3&_v=0.97530866&x-zp-page-request-id=ad1b5d3b9e3b4d2d9f0f0e6fcb3f8c1d-1626242840263-285644' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') job_list = soup.find_all('div', {'class': 'job-list'}) for job in job_list: job_name = job.find('a', {'target': '_blank', 'data-jid': True}).text.strip() job_salary = job.find('span', {'class': 'salary'}).text.strip() job_company = job.find('a', {'class': 'company-name'}).text.strip() job_location = job.find('span', {'class': 'job-area'}).text.strip() job_experience = job.find('span', {'class': 'job-exp'}).text.strip() print(job_name, job_salary, job_company, job_location, job_experience) ``` 在这个示例代码中,我们使用了 requests 库向智联招聘网站发送了一个 HTTP 请求,并设置了请求头部信息,以避免被网站识别为爬虫。然后,我们使用 BeautifulSoup 库解析了页面内容,并从中提取出了工作岗位信息。 您可以根据自己的需求修改代码中的参数和条件,以获得您需要的工作岗位信息。注意,爬取网站信息时要遵守相关法律法规和网站规定,不要过度频繁地请求网站,以免对网站造成影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值