Python爬取51job并保存在Mysql和txt文件中

本文介绍了一个Python脚本,该脚本使用正则表达式从51job网站抓取关于Python和Java职位的前10页招聘信息,包括工作地点和薪资范围。数据被清洗并转换为统一格式,然后存储在本地文件和SQLite数据库中。

 分别获取关键字是python、java,右边选择北京、上海、广州、深圳四个城市时前10页的招聘数据,用正则表达式解析获取的数据,按照以下格式分别把数据存储在文件和数据库中

关键字    工作地点    薪资min 薪资max
java       上海            1.5         1.6
java       深圳            1.5         3
java       上海            0.8         1
python    北京          1.5          2.5
python    广州          1.5          2.2
提示:网页上的数据有两处需要处理:
一是工作地点,原始内容可能是上海-浦东新区,只保留前面的城市名上海
二是薪资,原始内容是1.2-1.8万/月或10-20万/年,把单位换算成一致的,并且把最小值和最大值分开存放
 

# -*- coding:utf-8 -*-
import urllib.request
import re
import sqlite3

def get_content(page, key):
    url = 'https://search.51job.com/list/010000%252C020000%252C030200%252C040000,000000,0000,00,9,99,' + key + ',2,' + str(page) + '.html'
    a = urllib.request.urlopen(url)
    html = a.read().decode('gbk')
    lst = re.findall(r'<span class="t3">(北京|上海|广州|深圳).*?</span>\s+<span class="t4">(\d+\.?\d?)-(\d+\.?\d?)(万|千)/(年|月)</span>', html)
    return lst

conn = sqlite3.connect('51.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS jobs
        (key text, addr text, min float, max float)''')
c.execute('''delete from jobs''')
conn.commit()

with open('51.txt', 'w') as f:
    f.write('%s\t%s\t%s\t%s\n' % ('key','addr','min','max'))
    for key in ('python', 'java'):
        for each in range(1, 11):
            for items in get_content(each, key):
                min = float(items[1])
                max = float(items[2])
                if items[3] == "千":
                    min /= 10
                    max /= 10
                if items[4] == "年":
                    min /= 12
                    max /= 12
                f.write('%s\t%s\t%s\t%s\n' % (key, items[0], round(min, 2), round(max, 2)))
                c.execute("INSERT INTO jobs VALUES (?,?,?,?)", (key, items[0], round(min, 2), round(max, 2)))
conn.commit()
conn.close()

if __name__ == '__main__':
    lst = get_content(1, 'python')
    print(lst)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值