访问https://www.51job.com/,在搜索框输入关键字:python java,用右边的加号选择北京、上海、广州、深圳 四个城市,点击搜索按钮,同时谷歌浏览器的开发者工具,详细观察整个过程中http协议的请求以及响应的具体情况。.网页返回的内容是html格式的,下面是经过简化之后的部分页面内容:
<span class="t3">北京-朝阳区</span>
<span class="t4">1.5-2万/月</span>
<span class="t5">10-16</span>
<span class="t3">深圳-龙华新区</span>
<span class="t4">1.5-2.5万/月</span>
<span class="t5">10-16</span>
<span class="t3">北京-海淀区</span>
<span class="t4">0.8-1.5万/月</span>
<span class="t5">10-16</span>
<span class="t3">广州</span>
<span class="t4">1.5-2万/月</span>
<span class="t5">10-16</span>
请编写程序取出里面的数据部分,结果应该如下:
北京-朝阳区
1.5-2万/月
10-16
深圳-龙华新区
1.5-2.5万/月
10-16
北京-海淀区
0.8-1.5万/月
10-16
广州
1.5-2万/月
10-16
分别获取关键字是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)