指定岗位|城市的招聘信息爬虫案例【完整版代码】

一、背景介绍

       这里我们选择的是目前求职和招聘最常用的网站Bxxx,在采用其它方法的试验中,我们可能会遇到如下问题:

  1.  不知道该怎么解析网址,自定义城市和岗位的搜索词
  2.  不知道怎么样批量爬取,这里指的是自动切页
  3.  不知道该怎么破解动态cookie的问题(最麻烦)
  4.  多次访问导致ip被捕捉--“您的账号在过去24小时内有异常访问行为”,这里给出的最简单的方法就是:用手机给你的电脑开热点,一旦ip被限制,重启手机再开热点~

       随着博弈的进行,可能会出现包括但不限于上述的问题,建议大家寻求最新版的代码或方案进行解决。


二、完整版代码



import requests
import xlwt
from lxml import etree
import time                  
import random     
from selenium import webdriver


'''
你需要做的事情:
(1)封装岗位索引词的字典index_list
(2)增加城市编号-注意c开头
(3)记录每个网站爬取的页数
'''

def askURL(url):
    bro = webdriver.Edge(executable_path="C:/Users/86173/anaconda3/msedgedriver.exe")
    bro.get(url)
    #获取浏览器源代码数据
    html=bro.page_source
    #print(type(html))
    time.sleep(random.randint(1,5))
    bro.quit()
    return html

begin = 1
end = 2

base_url="https://www.zhipin.com"
index_list = {'数据分析师':'%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88',
              } #'岗位名称' : '访问网页通过复制获取对应的字符'
city_list = {"上海":"c101020100",
             }#"c101020100",'c100010000'--可以参考city.json

def getBoss(index,city):
    
    names = []  #岗位名称
    locations = []  #工作地点
    salarys = []  #岗位薪资
    requirements = []  #工作经验年限
    skills = []  #岗位所需技能标签
    educations = []  #学历要求
    companys = []  #企业名称
    comtypes = []  #企业所属行业类型
    comstatus = []  #企业上市进程
    comsizes = []  #企业规模
    welfairs = []  #企业福利
    links = []  #招聘详情链接
    items = []  #集成
    
    for page in range(begin, end+1):
        print(format("正在加载第%d页"%page))
        # 注意八页一次
        url = base_url + "/" + city_list[city] + "/?query=" + index_list[index] + "&page=" + str(page) + "&ka=page-" + str(page)
        html = askURL(url)
        #print(html)
    
        root=etree.HTML(html)
    
        name=root.xpath('//*[@id="main"]/div/div[2]/ul/li/div/div[1]/div[1]/div/div[1]/span[1]/a/text()')
        names.extend(name)
    
        location=root.xpath('// *[ @ id = "main"]/div/div[2]/ul/li/div/div[1]/div[1]/div/div[1]/span[2]/span/text()')
        locations.extend(location)
    
        salary=root.xpath('// *[ @ id = "main"] / div / div[2] / ul / li / div / div[1] / div[1] / div / div[2] / span/text()')
        salarys.extend(salary)
    
        requirement=root.xpath('// *[ @ id = "main"] / div / div[2] / ul / li / div / div[1] / div[1] / div / div[2] / p / text()[1]')
        requirements.extend(requirement)
        
        job_list = root.xpath('//*[@id="main"] / div / div[2] / ul / li / div / div[2] / div[1] ')
        skill = []
        for div in job_list:
            sp = div.xpath('./span/text()')
            for i in range(0,len(sp)-1):
                sp[i] = sp[i]+'/'
            skill.append(sp)
        skills.extend(skill)
    
        education=root.xpath('//*[@id="main"]/div/div[2]/ul/li/div/div[1]/div[1]/div/div[2]/p/text()[2]')
        educations.extend(education)
    
        company=root.xpath('// *[ @ id = "main"] / div / div[2] / ul / li / div / div[1] / div[2] / div / h3 / a/text()')
        companys.extend(company)
        
        comtype = root.xpath('//*[@id="main"] / div / div[2] / ul / li / div / div[1] / div[2] / div / p / a / text()')
        comtypes.extend(comtype)
        
        comstatu = root.xpath('//*[@id="main"]/div/div[2]/ul/li/div/div[1]/div[2]/div/p/text()[1]')
        comstatus.extend(comstatu)
        
        comsize = root.xpath('//*[@id="main"]/div/div[2]/ul/li/div/div[1]/div[2]/div/p/text()[2]')
        comsizes.extend(comsize)
        
        welfair = root.xpath('//*[@id="main"] / div / div[2] / ul / li / div / div[2] / div[2] /text()')
        welfairs.extend(welfair)
        
        link=root.xpath('//*[@id="main"]/div/div[2]/ul/li/div/div[1]/div[1]/div/div[1]/span[1]/a/@href')
        for i in range(0,len(link)):
            link[i]=base_url+link[i]
        links.extend(link)
    
    items.append(names)
    items.append(locations)
    items.append(salarys)
    items.append(requirements)
    items.append(skills)
    items.append(educations)
    items.append(companys)
    items.append(comtypes)
    items.append(comstatus)
    items.append(comsizes)
    items.append(welfairs)
    items.append(links)
    
    #print(items)
    
    book = xlwt.Workbook(encoding='utf-8')
    sheet = book.add_sheet('items')
    head = ['职位名称', '工作地点', '薪水', '工作经验', '技能需求','学历', '公司','企业类型','上市进程','企业规模','福利','详情链接']
    for i in range(0, len(head)):
        sheet.write(0, i, head[i])
    for i in range(0, len(head)):
        a = items[i]
        for j in range(len(a)):
            sheet.write(j + 1, i, a[j])
    book.save('C:/Boss直聘-'+index+'-'+city+'.xls')

for key in index_list.keys():
    for city in city_list.keys():
        getBoss(key, city)

三、注意事项

(1)需要自行下载webdriver

step1:选择需要用于爬虫的浏览器类型,下载对应的webdriver

Downloads | Selenium   因为我用的是edge,还有火狐、谷歌的用户对应搜索一下就行

指定岗位|城市的招聘信息爬虫案例【完整版代码】_第1张图片

 step2:将下载的.exe放在和python.exe同级的地方,并记录地址,替换 bro = webdriver.Edge(executable_path="保存的路径")

指定岗位|城市的招聘信息爬虫案例【完整版代码】_第2张图片

 step3:记得pip install selenium 才能调外部包

(2)自定义的部分看代码首部

page的话,我们的尝试是一次最多爬八页,但可以通过更改start-end进行持续获取,最后整合一下表格咯


四、获取结果

 字段名称可以自己选择,在head部分进行调整。

希望能有所帮助~​​​​​​​

指定岗位|城市的招聘信息爬虫案例【完整版代码】_第3张图片

你可能感兴趣的:(网页爬虫实例,爬虫,python,开发语言)