#=utf-8
():
(self,,):
爬虫的主调度器
职位
:paramworkPlace:工作地点
url=http://sou.zhaopin.com/jobs/searchresult.ashx?
url+=urllib.urlencode({jl:workPlace})
url+=
url+=urllib.urlencode({kw:position})
isflow=True#是否进行下一页的爬去
page=1
whileisflow:
url+=+str(page)
html=self.load(url)
self.deal1(html,page)
panduan=raw_input(是否继续爬虫下一页(y/n)!)
ifpanduan==y:
isflow=True
page+=1
else:
isflow=False
defload(self,url):
针对url地址进行全部爬去
:paramurl:url地址
:return:返回爬去的内容
header={
User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.79Safari/537.36
}
request=urllib2.Request(url,headers=header)
response=urllib2.urlopen(request)
html=response.read()
returnhtml
defdeal1(self,html,page):
对之前爬去的内容进行正则匹配,匹配职位所对应的链接
:paramhtml:之前爬去的内容
:parampage:正在爬去的页码
parrten=re.compile(a\s+style=font-weight:\s+bold\s+par=ssidkey=yss=\d+ff=\d+sg=\w+so=\d+\s+href=(.*?)rel=externalnofollowtarget=_blank.*?/a,re.S)
til=parrten.findall(html)#爬去链接
fortintil:
self.deal2(t,page)
defdeal2(self,t,page):
进行二次爬虫,然后在新的页面中对公司、薪资、工作经验进行匹配
:paramt:url地址
:parampage:当前匹配的页数
html=self.load(t)#返回二次爬虫的内容
parrten1=re.compile(a\s+οnclick=.*?\s+href=.*?rel=externalnofollow\s+target=_blank(.*?)\s+.*?img\s+class=.*?\s+src=.*?\s+border=\d+\s+vinfo=.*?/a,re.S)
parrten2=re.compile(lispan职位月薪:/spanstrong(.*?)a.*?.*?/a/strong/li,re.S)
parrent3=re.compile(lispan工作经验:/spanstrong(.*?)/strong/li,re.S)
til1=parrten1.findall(html)
til2=parrten2.findall(html)
til3=parrent3.findall(html)
str=
fortintil1:
t=t.replace(imgtitle=专属页面src=//img03.zhaopin.cn/2012/img/jobs/icon.pngborder=0/,)
str+=t
str+=\t
fortintil2:
str+=t
str+=\t
fortintil3:
str+=t
self.writeData(str,page)
defwriteData(self,context,page):
将最终爬去的内容写入文件中
:paramcontext:匹配好的内容
:parampage:当前爬去的页码数
fileName=di+str(page)+yehtml.txt
withopen(fileName,a)asfile:
file.writelines(context+
)
if__name__==__main__:
position=raw_input(请输入职位:)
workPlace=raw_input(请输入工作地点:)
z=zhiLian()
z.spider(position,workPlace)