Python3 + xpath + excel 实现对boss直聘网的爬取

it2022-05-05  239

一、项目简介

1.内容:抓取boss直聘网上广州地区的 python 相关工作的招聘信息,并且将招聘信息循环保存在excel表中

2.目标网站:https://www.zhipin.com/c101280100/?query=python&page=

3.使用软件:pycharm

4.使用版本:python3.7

5.涉及的python类库:requests、xlwt、lxml

 

二、具体思路

 

1.安装、导入相关的类库

import requests #请求网页 import xlwt #excel操作 from lxml import etree #xpath

2.确定网页,确定请求头,解决反爬机制。

#获取页面 def getPage(): #请求头处理 header = { "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/63.0.3239.132 Safari/537.36" } #定义一个列表存放所有的html信息 responses = [] #循环抓取7页的html代码 for page in range(1,8): url = "https://www.zhipin.com/c101280100/?query=python&page=" + str(page) response = requests.get(url,headers = header).text responses.append(response) print("第"+str(page)+"页读取保存成功") return str(responses)

3.解析网页,处理爬取到的数据。

#解释函数:运用xpath处理html def parse(text): html = etree.HTML(text) # 初始化 标准化 #岗位 jobs = html.xpath('//div[@class="job-title"]/text()') #地点 place = html.xpath('//div[@class="info-primary"]/p/text()[1]') #工作经验 workyear = html.xpath('//div[@class="info-primary"]/p/text()[2]') #学历要求 xueli = html.xpath('//div[@class="info-primary"]/p/text()[3]') #工资 salary = html.xpath('//div[@class="info-primary"]//span[@class="red"]/text()') #招聘企业 company = html.xpath('//div[@class="company-text"]//a/text()') # zip() 打包为元组的列表 加上 list 才能转化为元组的列表 jobs_data = list(zip(jobs,place,workyear,xueli,salary,company)) # 第一行加上列名 jobs_data.insert(0, ("岗位","地点","工作经验", "学历要求","薪资", "招聘企业")) # 调用保存为excel的函数 save_to_excel("python", "python", jobs_data)

4.保存数据

#保存为excel文件 def save_to_excel(filename,sheet_name,data): f = xlwt.Workbook(encoding='utf-8') #创建一个Workbook 设置编码 # 第二参数表示是否可以覆盖单元格 其实是 Workbook实例化的一个参数,默认值为False sheet = f.add_sheet(sheet_name,cell_overwrite_ok=True) # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列, # 同时列出数据和数据下标,一般用在 for 循环当中。 for row,row_data in enumerate(data): #处理行 for column,column_data in enumerate(row_data): #处理列 sheet.write(row,column,str(column_data)) f.save(filename + ".xls")

三、代码生成

#!/usr/bin/env python #-*- coding:utf-8 -*- #author : Only time:2019/7/21 1020 """ 需求分析 1. 确定网址 2. 请求数据 3. 保存数据 """ import requests import xlwt from lxml import etree #xpath #获取页面 def getPage(): #请求头处理 header = { "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/63.0.3239.132 Safari/537.36" } #定义一个列表存放所有的html信息 responses = [] #循环抓取7页的html代码 for page in range(1,8): url = "https://www.zhipin.com/c101280100/?query=python&page=" + str(page) response = requests.get(url,headers = header).text responses.append(response) print("第"+str(page)+"页读取保存成功") return str(responses) #解释函数 def parse(text): html = etree.HTML(text) # 初始化 标准化 #岗位 jobs = html.xpath('//div[@class="job-title"]/text()') #地点 place = html.xpath('//div[@class="info-primary"]/p/text()[1]') #工作经验 workyear = html.xpath('//div[@class="info-primary"]/p/text()[2]') #学历要求 xueli = html.xpath('//div[@class="info-primary"]/p/text()[3]') #工资 salary = html.xpath('//div[@class="info-primary"]//span[@class="red"]/text()') #招聘企业 company = html.xpath('//div[@class="company-text"]//a/text()') # zip() 打包为元组的列表 加上 list 才能转化为元组的列表 jobs_data = list(zip(jobs,place,workyear,xueli,salary,company)) # 第一行加上列名 jobs_data.insert(0, ("岗位","地点","工作经验", "学历要求","薪资", "招聘企业")) # 调用保存为excel的函数 save_to_excel("python", "python", jobs_data) #保存为excel文件 def save_to_excel(filename,sheet_name,data): f = xlwt.Workbook(encoding='utf-8') #创建一个Workbook 设置编码 # 第二参数表示是否可以覆盖单元格 其实是 Workbook实例化的一个参数,默认值为False sheet = f.add_sheet(sheet_name,cell_overwrite_ok=True) # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列, # 同时列出数据和数据下标,一般用在 for 循环当中。 for row,row_data in enumerate(data): #处理行 for column,column_data in enumerate(row_data): #处理列 sheet.write(row,column,str(column_data)) f.save(filename + ".xls") #主函数 if __name__ == '__main__': parse(getPage())

四、代码运行结果如下   一共抓取了186条广州Python招聘信息

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~此处省略一百条招聘数据~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

结论:工作经验  决定  薪资

 

 


最新回复(0)