Phthon3爬取前程无忧数据量信息

1、背景介绍

近几年掀起了一股Python风,各大网站、公众号等都在宣传和力挺Python。我开始挺抗拒的,别人越是这么说,我就偏不这么干。后面…由于毕设需要使用Python…结果,嗯!真香!!

好了,言归正传。本文主要爬取前程无忧大数据类相关职位的一些基本信息:岗位名称、公司名称、工作地点、薪资以及岗位发布时间。对于我们这种新生,爬取这种还是比较有成就感的。

2、爬取数据保存到.txt文件

(1)网页分析

进入前程无忧招聘网站,搜索大数据,就会出现如下图1所示:

图1 前程无忧数据类招聘页面

我们进入到这个网站后,需要关注两个地方,一是观察此网页的网址,二是查看此网页的源码。具体见下图2和图3:
在这里插入图片描述
图2 网址分析

根据图2我们可以分析出:前程无忧分页的规律,我们分页爬取只要修改这里的数字即可!

在这里插入图片描述
图3 源代码分析

根据图3我们可以分析出要想爬取我们想要的数据,就要分析这些数据在网页里面的规律,以此来写出正则表达式。

更加图3我们可以写出其正则表达式为:

 pat='<a target="_blank" title="(.*?)".*?<span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*?<span class="t5">(.*?)</span>'

(2)代码编写

通过前面的网页分析,我们已经发现网址规律已经正则表达式规律。下面,我们就可以开始书写代码爬取数据啦!

#爬取前程无忧Python数据--写进.txt文件
import urllib.request
import re

#获取源码
def get_content(page):
    url='https://search.51job.com/list/000000,000000,0000,00,9,99,%25E5%25A4%25A7%25E6%2595%25B0%25E6%258D%25AE,2,'+str(page)+'.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='
    html = urllib.request.urlopen(url).read().decode("GBK","ignore")#打开网址
    return html


#读取此网页里面的内容并把正则表达式匹配的数据提取出来
def get(html):
    pat='<a target="_blank" title="(.*?)".*?<span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*?<span class="t5">(.*?)</span>'
    #pat='<a target="_blank" title="(.*?)" href=".*?"'
    rst=re.compile(pat,re.S).findall(html)
    return rst


#多页处理,下载到文件
for i in range(1,10):
    print("正在爬取第"+str(i)+"页数据...")
    html=get_content(i)#调用获取网页源码
    #print("网址源码:"+html)
    rst=get(html)
    #print("数据:"+str(rst))
    for j in rst:
        with open("D:/Test/data/data1.txt","a",encoding="utf-8") as f:
            f.write(j[0]+'\t'+j[1]+'\t'+j[2]+'\t'+j[3]+'\t'+j[4]+'\t'+'\n')
            f.close()

(3)最终结果

在这里插入图片描述

3、爬取数据保存到excel文件

前面的分析都是一模一样,唯一不同的就是代码有点区别!

(1)代码编写

#爬取前程无忧Python数据--创建并写进excel文件
import urllib.request
import re
import xlwt #用来创建excel文档并写入数据

#获取源码
def get_content(page):
    url='https://search.51job.com/list/000000,000000,0000,00,9,99,%25E5%25A4%25A7%25E6%2595%25B0%25E6%258D%25AE,2,'+str(page)+'.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='
    html = urllib.request.urlopen(url).read().decode("GBK","ignore")#打开网址
    return html

#读取此网页里面的内容并把正则表达式匹配的数据提取出来
def get(html):
    pat='<a target="_blank" title="(.*?)".*?<span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*?<span class="t5">(.*?)</span>'
    rst=re.compile(pat,re.S).findall(html)
    return rst

#爬取到的内容写入excel表格
def excel_write(rst,index):
    for item in rst:
        for i in range(0,5):
            ws.write(index,i,item[i]) #行,列,数据
        print(index)
        index += 1

newTable="D:/Test/data/data1.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):
    index = (each-1) * 50 + 1
    excel_write(get(get_content(each)),index)
wb.save(newTable)

(2)最终结果

在这里插入图片描述

本篇博客主要借鉴了:https://www.cnblogs.com/Beyond-Ricky/p/6771028.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值