Python爬虫实战一之使用Beautiful Soup抓取百度招聘信息并存储excel文件
来源:互联网 发布:用什么软件挂号 编辑:程序博客网 时间:2024/04/26 14:57
开发工具:
python版本:python2.7
开发工具:Eclipse
开发需求:
1、爬取百度招聘下的招聘信息:岗位名称、工作地点、公司名称、薪资、发布时间
2、超链接招聘具体信息:职位描述
3、可以根据岗位名称包含主要字段进行分类存储
4、可以根据发布时间进行分类存储
5、可以根据新增水平进行分类存储
...............
开发思路
1、找到翻页的url规律
第一页:http://zhaopin.baidu.com/quanzhi?query=%E6%B5%8B%E8%AF%95&sort_type=1&city=%E6%B5%8E%E5%8D%97&detailmode=close&rn=20&pn=0
第二页:http://zhaopin.baidu.com/quanzhi?query=%E6%B5%8B%E8%AF%95&sort_type=1&city=%E6%B5%8E%E5%8D%97&detailmode=close&rn=20&pn=20
第三页:http://zhaopin.baidu.com/quanzhi?query=%E6%B5%8B%E8%AF%95&sort_type=1&city=%E6%B5%8E%E5%8D%97&detailmode=close&rn=20&pn=40
..............
2、找到超链接的url规律
http://zhaopin.baidu.com'+href
其中从招聘信息中获取href标签半个路径
3、如何获取需要的岗位名称、工作地点、公司名称、薪资、发布时间、职位描述等信息,并封装为一个字典对象中
4、生成excel文件,并把字典数据存储进去
开发源代码
1、创建excel源代码类
#encoding:utf-8
#/usr/bin/python2.7
'''
Created on 2017年07月25日
@author: ********
'''
import xlwt
import time,os
class StatisticsReport(object):
t=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
#设置单元格样式
def set_style(self,name,height,bold=False):
# 初始化样式
style = xlwt.XFStyle()
# 为样式创建字体
font = xlwt.Font()
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style
def __createStatisticsReport__(self):
RunNo=self.t
reportname=RunNo+'.xls'
self.__setreportname__(reportname)
ReportFile=xlwt.Workbook()
#创建1个测试报告sheet页名称
ReportFile.add_sheet(u'测试类岗位',cell_overwrite_ok=True)
#-------------写入按测试类岗位的信息表头
#岗位名称 地区 公司名称 薪资 发布时间 岗位信息
wr_tree = ReportFile.get_sheet(0)
row0=[u'岗位名称',u'地区',u'公司名称',u'薪资',u'发布时间',u'岗位信息']
#生成按测试类岗位的信息表头
for i in range(0,len(row0)):
wr_tree.write(0,i,row0[i],self.set_style('Times New Roman',220,True))
reportpath=os.path.abspath("..")+'\\'
print reportpath+reportname
ReportFile.save(reportpath+reportname)
def __setreportname__(self,reportname):
self.reportname=reportname
def __getreportname__(self):
return self.reportname
2、获取招聘信息并存储excel文件
#encoding:utf-8
'''
Created on 2017年7月25日
@author: ********
'''
import urllib2
from bs4 import BeautifulSoup
import xlrd,os
from xlutils.copy import copy
from StatisticsReport import StatisticsReport
def GetJobinfo():
dict1={}
n=1
head = {} #设置头
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'
urlhead='http://zhaopin.baidu.com/quanzhi?query=%E6%B5%8B%E8%AF%95&sort_type=1&city=%E6%B5%8E%E5%8D%97&detailmode=close&rn=20&pn=';
for i in range(0,n):
#获取url全路径
get_url=urlhead+str(2*i*10);
#模拟浏览器,定制http请求头
request=urllib2.Request(url=get_url,headers = head)
#模拟浏览器,调用urlopen并传入Request对象,将返回一个相关请求response对象
reponse=urllib2.urlopen(request)
#这个应答对象如同一个文件对象,可以在Response中调用.read()读取这个文件信息
zhaop_html=reponse.read().decode('utf-8')
# UTF-8模式读取获取的页面信息标签和内容
zhaop_htmltables=BeautifulSoup(zhaop_html,'lxml');
#获取所有'a'标签以及内容
get_linka_list=zhaop_htmltables.find_all('a')
j=0
for alink in get_linka_list:
href=alink.get('href')
if href.find('/szzw?detailidx=')==-1:
pass
else:
get_joburl='http://zhaopin.baidu.com'+href;
jobname=alink.span.get_text()
jobarea=alink.find_all('p')[0].get_text().split('|')[0]
jobcompany=alink.find_all('p')[0].get_text().split('|')[1]
jobpay=alink.find_all('p')[1].get_text()
jobdate=alink.find_all('p')[2].get_text()
get_jobrequest=urllib2.Request(url=get_joburl,headers = head)
#模拟浏览器,调用urlopen并传入Request对象,将返回一个相关请求response对象
get_jobreponse=urllib2.urlopen(get_jobrequest)
#这个应答对象如同一个文件对象,可以在Response中调用.read()读取这个文件信息
get_job_html=get_jobreponse.read().decode('utf-8')
# UTF-8模式读取获取的页面信息标签和内容
zhaop_htmltables=BeautifulSoup(get_job_html,'lxml');
job_tag=zhaop_htmltables.find_all(name='div',attrs={'class':'abs'});
job_decs=job_tag[0].find_all('p')
job_decinfo=''
for job_dec in job_decs:
job_decinfo+=job_dec.get_text()+'\n'
list1=[jobname,jobarea,jobcompany,jobpay,jobdate,job_decinfo]
j+=1
key='test'+str(j)
dict2=dict.fromkeys([key], list1)
dict1.update(dict2)
return dict1
def GenerateReport(report,job_dict):
reportpath=os.path.abspath("..")+'\\'
reportname=report.__getreportname__()
bk=xlrd.open_workbook(reportpath+reportname)
wb=copy(bk)
wa=wb.get_sheet(0)
for i in range(0,len(job_dict)):
for j in range(0,len(job_dict.values()[i])):
wa.write(i+1,j,job_dict.values()[i][j])
wb.save(reportpath+reportname)
if __name__ == '__main__':
report=StatisticsReport()
report.__createStatisticsReport__()
job_dict=GetJobinfo()
GenerateReport(report,job_dict)
执行结果
- Python爬虫实战一之使用Beautiful Soup抓取百度招聘信息并存储excel文件
- Python爬虫实战一之使用Beautiful Soup抓取‘谣言百科’的分类内容
- Python爬虫之Beautiful Soup库的安装与使用
- python爬虫之Beautiful Soup从安装到详细使用
- Python网页抓取之Beautiful Soup
- Python爬虫之抓取数据——正则表达式/Beautiful Soup/Lxml
- 爬虫框架Scrapy实战之批量抓取招聘信息
- 爬虫框架Scrapy实战之批量抓取招聘信息
- 爬虫框架Scrapy实战之批量抓取招聘信息
- 爬虫 Python爬虫利器二之Beautiful Soup的用法
- Python网络爬虫与信息提取-Day6-Beautiful Soup库
- Python爬虫利器Beautiful Soup
- python爬虫利器--beautiful Soup
- [python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL
- Python爬虫框架Scrapy实战之批量抓取招聘
- Python爬虫入门八之Beautiful Soup的用法
- Python爬虫入门之Beautiful Soup的用法
- Python爬虫入门八之Beautiful Soup的用法
- 解决使用plt.savefig保存图片时一片空白
- 【量亿数据-金融数据】几种经典的滤波算法
- Cannot start compilation: the output path is not specified for module "HelloWorld". Specify the outp
- android控件之expandableListView
- SIFT/SURF/ FAST / BREIF / ORB特征
- Python爬虫实战一之使用Beautiful Soup抓取百度招聘信息并存储excel文件
- 获取不同类别apk
- Tree-----109. Convert Sorted List to Binary Search Tree
- 浏览器的工作原理:新式网络浏览器幕后揭秘
- C++学习(58)
- 引用Aspose.Words,操作Word模板创建表格
- CTF实验吧-因缺思汀的绕过【group by,with rollup,limit offset的利用】
- PicPick的安装方法
- promise then catch