700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python爬虫实战一之使用Beautiful Soup抓取百度招聘信息并存储excel文件

Python爬虫实战一之使用Beautiful Soup抓取百度招聘信息并存储excel文件

时间:2019-09-25 01:25:22

相关推荐

Python爬虫实战一之使用Beautiful Soup抓取百度招聘信息并存储excel文件

开发工具:

python版本:python2.7

开发工具:Eclipse

开发需求:

1、爬取百度招聘下的招聘信息:岗位名称、工作地点、公司名称、薪资、发布时间

2、超链接招聘具体信息:职位描述

3、可以根据岗位名称包含主要字段进行分类存储

4、可以根据发布时间进行分类存储

5、可以根据新增水平进行分类存储

...............

开发思路

1、找到翻页的url规律

第一页:/quanzhi?query=%E6%B5%8B%E8%AF%95&sort_type=1&city=%E6%B5%8E%E5%8D%97&detailmode=close&rn=20&pn=0

第二页:/quanzhi?query=%E6%B5%8B%E8%AF%95&sort_type=1&city=%E6%B5%8E%E5%8D%97&detailmode=close&rn=20&pn=20

第三页:/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规律

'+href

其中从招聘信息中获取href标签半个路径

3、如何获取需要的岗位名称、工作地点、公司名称、薪资、发布时间、职位描述等信息,并封装为一个字典对象中

4、生成excel文件,并把字典数据存储进去

开发源代码

1、创建excel源代码类

#encoding:utf-8

#/usr/bin/python2.7

'''

Created on 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 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/0101 Firefox/52.0'

urlhead='/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=''+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)

执行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。