本次主要围绕数据分析岗位的招聘情况, 进行一个简单的数据分析
环境
win8, python3.7, pycharm, jupyter notebook
关注后私信小编 PDF领取十套电子文档书籍
正文
1. 明确分析目的
了解数据分析岗位的最新招聘情况, 包括地区分布, 学历要求, 经验要求, 薪资水平等.
2. 数据收集
这里借助爬虫, 爬取招聘网站的招聘信息, 进而分析出相关的薪资以及招聘要求.
2.1 目标站点分析
通过对目标站点的分析, 我们需要确定目标站点的请求方式, 以及网页结构.
2.2 新建scrapy项目
1. 在cmd命令行窗口中任意路径下执行以下代码, 比如在"D:pythonTests"目录下新建zhaopin项目.
d:
cd D:pythonTests
scrapy startproject zhaopin
2. 在完成了zhaopin项目创建之后, 接下来就是在zhaopin项目文件夹中新建spider爬虫主程序
cd zhaopin
scrapy genspider zhaopinSpider zhaopin.com
这样就完成项目zhaopin的创建, 开始编写我们的程序吧.
2.3 定义items
在items.py文件中定义需要爬取的招聘信息.
import scrapy
from scrapy.item import Item, Field
class zhaopinItem(Item):
# define the fields for your item here like:
# name = scrapy.Field()
JobTitle = Field() #职位名称
CompanyName = Field() #公司名称
CompanyNature = Field() #公司性质
CompanySize = Field() #公司规模
IndustryField = Field() #所属行业
Salary = Field() #薪水
Workplace = Field() #工作地点
Workyear = Field() #要求工作经验
Education = Field() #要求学历
RecruitNumbers = Field() #招聘人数
ReleaseTime = Field() #发布时间
Language = Field() #要求语言
Specialty = Field() #要求专业
PositionAdvantage = Field() #职位福利
2.4 编写爬虫主程序
在zhaopinSpider.py文件中编写爬虫主程序
import scrapy
from scrapy.selector import Selector
from scrapy.spiders import CrawlSpider
from scrapy.http import Request
from zhaopin.items import zhaopinItem
class ZhaoPinSpider(scrapy.Spider):
name = "ZhaoPinSpider"
allowed_domains = ['zhaopin.com']
start_urls = ['https://xxxx.com/list/2,{0}.html?'.format(str(page)) for page in range(1, 217)]
def parse(self, response):
'''
开始第一页
:param response:
:return:
'''
yield Request(
url = response.url,
callback = self.parse_job_url,
meta={},
dont_filter= True
)
def parse_job_url(self, response):
'''
获取每页的职位详情页url
:param response:
:return:
'''
selector = Selector(response)
urls = selector.xpath('//div[@class="el"]/p/span')
for url in urls:
url = url.xpath('a/@href').extract()[0]
yield Request(
url = url,
callback = self.parse_job_info,
meta = {},
dont_filter = True
)
def parse_job_info(self, response):
'''
解析工作详情页
:param response:
:return:
'''
item = Job51Item()
selector = Selector(response)
JobTitle = selector.xpath('//div[@class="cn"]/h1/text()').extract()[0].strip().replace(' ','').replace(',',';')
CompanyName = selector.xpath('//div[@class="cn"]/p[1]/a[1]/text()').extract()[0].strip().replace(',',';')
CompanyNature = selector.xpath('//div[@class="tCompany_sidebar"]/div/div[2]/p[1]/text()').extract()[0].strip().replace(',',';')
CompanySize = selector.xpath('//div[@class="tCompany_sidebar"]/div/div[2]/p[2]/text()').extract()[0].strip().replace(',',';')
IndustryField = selector.xpath('//div[@class="tCompany_sidebar"]/div/div[2]/p[3]/text()').extract()[0].strip().replace(',',';')
Salary = selector.xpath('//div[@class="cn"]/strong/text()').extract()[0].strip().replace(',',';')
infos = selector.xpath('//div[@class="cn"]/p[2]/text()').extract()
Workplace = infos[0].strip().replace(' ','').replace(',',';')
Workyear = infos[1].strip().replace(' ','').replace(',',';')
if len(infos) == 4:
Education = ''
RecruitNumbers = infos[2].strip().replace(' ', '').replace(',',';')
ReleaseTime = infos[3].strip().replace(' ', '').replace(',',';')
else:
Education = infos[2].strip().replace(' ', '').replace(',',';')
RecruitNumbers = infos[3].strip().replace(' ', '').replace(',',';')
ReleaseTime = infos[4].str