[Python] Python爬虫 抓取51job职位信息存储到excel和mysql 的代码编写及首次优化始末

本文记录了使用Python爬虫抓取51job网站上的职位信息,包括如何按需抓取指定职位并存储到Excel的不同sheet中,以及如何将数据存入MySQL数据库的过程。在初版代码中,存在sheet名重复、MySQL存储错误等问题。通过代码审查,将爬虫、Excel存储和MySQL存储功能拆分开,优化了Excel存储的重复代码,并处理了存储过程中的异常情况。经过首次优化,实现了查重写入的方式来避免数据覆盖问题,为后续的数据清洗提供了便利。
摘要由CSDN通过智能技术生成

目录

需求:

初版:

初版代码review:

优化:

首次优化后代码:


需求:

        编写函数,可以指明抓取某职位以及页数实现抓不同职位时(用正则和request),存到同一个excel中的不同sheet中,并将数据存到mysql中

初版:

        以下是第一次编写代码时的思路

#编写正则
def getjobname(jobname,startnum,endnum):
    allresult=[]
    jobname1=request.quote(request.quote(jobname))
    for i in range(startnum,endnum):
        print('正在抓取第',i,'页')
        url='https://search.51job.com/list/000000,000000,0000,00,9,99,'+jobname1+',2,'+str(i)+'.html?lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=4&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
        response=request.urlopen(url)
        html=response.read().decode('gbk')
        #编写正则用来提取信息,去掉的东西都用.*?来代替
        reg=re.compile('<div class="el">.*?<p class="t1 ">.*?<a target="_blank" title="(.*?)".*?<span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*?<span class="t5">(.*?)</span>.*?</div>',re.S)
        result=re.findall(reg,html)
        allresult+=result

         这里对jobname进行了解码处理,将函数执行时输入的汉字职位转化为匹配51job代码的值

 #存储到xls:
    if os.path.exists('51job职位信息.xlsx'):
        workbook = load_workbook("51job职位信息.xlsx")
        sheetNames = workbook.sheetnames
        if jobname in sheetNames:
            print("sheetName 重复")
            return
        else:
            sheet=workbook.create_sheet(jobname,len(sheetNames)+1)
            sheet.append('职位名,公司名,工作地点,薪资,发布时间'.split(','))
            for each in allresult:
                sheet.append(each)

    else:
        workbook=Workbook()
        sheet=workbook.active
        sheet.title=jobname
        sheet.append('职位名,公司名,工作地点,薪资,发布时间'.split(','))
        for each in allresult:
            sheet.append(each)

    workbook.save('51job职位信息.xlsx')

#存储到mysql
    connection = pymysql.connect(
        host='localhost',
        user='root',
        password='1234',
        db='jobinfo',
        charset='utf8'
    )
    cursor = connection.cursor()

    for index, each in enumerate(allresult):
        sql = "insert into info
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值