爬虫入门(3)——拉钩网

文章目录

  • 1.lagou网
    • 1.1.获得cookie
    • 1.2.获取数据
    • 1.3.获取其他页面的数据
    • 1.4.不同城市
  • 2.代码
    • 2.1.获得cookie
    • 2.2.请求获得数据
    • 2.3.解析字典,获得特定数据
    • 2.4.获得多个页面的数据
  • 3.数据库的建立
    • 3.1.数据库服务的启动
    • 3.2.登录数据库
    • 3.3.创建数据库python_job,建立数据表python_jobs,插入数据的sql语句
    • 3.4.数据库出现的错误
  • 4.结果
  • 5.reference

1.lagou网

需要用到的技术:ajax请求,mysql,excel

1.1.获得cookie

网址:https://www.lagou.com/

爬虫入门(3)——拉钩网_第1张图片

当在搜索框输入python后,网址发生改变,此网址即是我们要的。

爬虫入门(3)——拉钩网_第2张图片

右键查看源码,在network标签可以看到request的url为Request URL: https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=

爬虫入门(3)——拉钩网_第3张图片

想要获得此链接,需要在搜索框输入python,network会刷新,然后才会出现此链接。
https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false
方法是post。
爬虫入门(3)——拉钩网_第4张图片

1.2.获取数据

response里的数据就是我们想要的。
在这里插入图片描述

到这里我们知道了从哪里请求数据,从哪里获取结果。但是 result 列表中只有第一页 15 条数据,其他页面数据怎么获取呢?

1.3.获取其他页面的数据

这里用到请求参数。
在这里插入图片描述

爬虫入门(3)——拉钩网_第5张图片

kd 就是我们搜索的关键词,pn 就是当前页码。first 默认就行了,不用管它。剩下的事情就是构造请求,来下载 30 个页面的数据了。

1.4.不同城市

PHP把中文生成%E4%B8%8A%E6%B5%B7,爬虫时可以写中文。
当输入python进行搜索后,再选择对应的城市,即会获得要下载内容的链接。
点击左侧的:
positionAjax.json?px=default&city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false

右边可以看到:
https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false

爬虫入门(3)——拉钩网_第6张图片

爬虫入门(3)——拉钩网_第7张图片

爬虫入门(3)——拉钩网_第8张图片

2.代码

2.1.获得cookie

# 模型浏览器
header = {
     
    'User-Agent': 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
    'Accept': 'application/json, text/javascript, */*; q=0.01'
}
urls = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='

s = requests.Session()
# 获取搜索页的cookies
s.get(urls, headers=header, timeout=3)
# 为此次获取的cookies
cookie = s.cookies

2.2.请求获得数据

payload = {
     
    'first': 'true',
    'pn': '2',  # 搜索出来的一个页面
    'kd': 'python'  # 搜索的keyword
}
url='https://www.lagou.com/jobs/positionAjax.json?city=广州&needAddtionalResult=false'
# 获取此次文本
response = s.post(url, data=payload, headers=header, cookies=cookie, timeout=5).json()
print(type(response))
print(response)
"""

{'success': True, 'msg': None, 'code': 0, 'content': {'showId': '5e738ce8eaca469080e4d2d049cb711a', 'hrInfoMap': {'6578596': {'userId': 7339435, 'portrait': 'i/image2/M01/83/66/CgoB5luFTlmAbUdBAAAWVK2XbLY113.jpg', 'realName': '酷狗招聘', 'positionName': '招聘主管', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '6582692': {'userId': 15550697, 'portrait': 'i/image2/M01/0E/8C/CgoB5lyhgdiAN-4AAACeGEp-ay0931.png', 'realName': '廖小姐', 'positionName': '人力资源经理', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7685943': {'userId': 11763841, 'portrait': 'i/image2/M01/71/6A/CgoB5l1JhbCAeYMVAABmUR8PEmM496.png', 'realName': 'susan', 'positionName': 'HRBP总监', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7600437': {'userId': 1351513, 'portrait': 'i/image/M00/36/F2/CgpFT1lIeM2Ac-ikAAD6cIqX6gk251.jpg', 'realName': 'hr', 'positionName': None, 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '6727278': {'userId': 7406615, 'portrait': 'i/image2/M01/0E/AC/CgotOVyhgdWACcZgAABtgMsGk64396.png', 'realName': '龚文滢', 'positionName': '招聘经理', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7552538': {'userId': 14964085, 'portrait': 'i/image2/M01/7F/54/CgoB5l1l_OiAAmP1AADg8xYvd-I381.png', 'realName': '吴小姐', 'positionName': '人事', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7571322': {'userId': 6213860, 'portrait': 'i/image2/M01/B7/AF/CgoB5lwQrh6AboxXAAAeoek5COc924.png', 'realName': '郑植青', 'positionName': '高级招聘专员', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7685848': {'userId': 8733402, 'portrait': 'i/image3/M01/08/E0/Ciqah16G26qAbTjTAAGR852KedA512.png', 'realName': 'Hayley', 'positionName': '人事主管', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7703835': {'userId': 18835015, 'portrait': 'i/image2/M01/0E/AC/CgotOVyhgdWACcZgAABtgMsGk64396.png', 'realName': '简女士', 'positionName': '人事专员', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7660903': {'userId': 6766999, 'portrait': 'i/image/M00/10/ED/CgqCHl7LYqSAafgZAAAFpGQNC20708.jpg', 'realName': '钟小姐', 'positionName': 'HR', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '4445175': {'userId': 10573054, 'portrait': 'i/image3/M01/77/EC/Cgq2xl5zEhaALplJAAAXrIUlUwI009.png', 'realName': '吴小姐', 'positionName': 'HR', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7659233': {'userId': 15024490, 'portrait': 'i/image/M00/4C/AA/CgqCHl9YbfaANpELAAAN8YZrl34699.jpg', 'realName': '谢先生', 'positionName': 'HR', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7636013': {'userId': 12307769, 'portrait': 'i/image2/M01/0E/AC/CgotOVyhgdKAWLwZAACHltqNgkc507.png', 'realName': '张瑞婷', 'positionName': '招聘专员', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '7683241': {'userId': 2139289, 'portrait': 'i/image/M00/0B/04/CgqCHl6_ao2AF0mBAADw8_UZfCY074.png', 'realName': '汪航行', 'positionName': 'CEO', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}, '6818007': {'userId': 12035286, 'portrait': 'i/image2/M01/E1/76/CgoB5lxuJb2AY4xUAAAt6fuwzro921.jpg', 'realName': '悦谦HR', 'positionName': 'HR', 'phone': None, 'receiveEmail': None, 'userLevel': 'G1', 'canTalk': True}}, 'pageNo': 2, 'positionResult': {'resultSize': 15, 'result': [{'positionId': 7600437, 'positionName': 'python爬虫实习生', 'companyId': 59065, 'companyFullName': '深圳道乐科技有限公司', 'companyShortName': '深圳道乐', 'companyLogo': 'i/image/M00/2B/09/Cgp3O1cz3XCALv3nAAAPSe2ZDB4093.png', 'companySize': '150-500人', 'industryField': '移动互联网,金融', 'financeStage': '未融资', 'companyLabelList': ['年终奖励', '成长空间', '扁平管理', '美女多'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['Python'], 'industryLables': [], 'createTime': '2020-09-14 10:19:54', 'formatCreateTime': '10:19发布', 'city': '广州', 'district': '海珠区', 'businessZones': None, 'salary': '2k-3k', 'salaryMonth': '0', 'workYear': '应届毕业生', 'jobNature': '实习', 'education': '本科', 'positionAdvantage': '拥抱互联网金融大平台,接触一线券商企业客户', 'imState': 'disabled', 'lastLogin': '2020-09-14 15:11:20', 'publisherId': 1351513, 'approve': 1, 'subwayline': '3号线', 'stationname': '客村', 'linestaion': '3号线_大塘;3号线_客村;8号线_客村', 'latitude': '23.083801', 'longitude': '113.317388', 'distance': None, 'hitags': None, 'resumeProcessRate': 100, 'resumeProcessDay': 1, 'score': 7, 'newScore': 0.0, 'matchScore': 1.8469921, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 1, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 7685848, 'positionName': 'Python后端开发工程师', 'companyId': 210273, 'companyFullName': '广州市咪佰信息科技有限公司', 'companyShortName': '咪佰科技', 'companyLogo': 'i/image2/M01/7F/9F/CgoB5l1mQY-AF34gAABSPUGRNvI981.png', 'companySize': '少于15人', 'industryField': '移动互联网,广告营销', 'financeStage': '未融资', 'companyLabelList': ['年度旅游', '节日礼物', '领导好', '扁平管理'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['游戏开发', 'Python', '数据采集'], 'positionLables': ['游戏开发', 'Python', '数据采集'], 'industryLables': [], 'createTime': '2020-09-14 09:36:29', 'formatCreateTime': '09:36发布', 'city': '广州', 'district': '番禺区', 'businessZones': None, 'salary': '8k-12k', 'salaryMonth': '13', 'workYear': '应届毕业生', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '双休 下午茶 扁平化管理', 'imState': 'today', 'lastLogin': '2020-09-14 14:10:39', 'publisherId': 8733402, 'approve': 1, 'subwayline': '4号线', 'stationname': '大学城北', 'linestaion': '4号线_大学城北', 'latitude': '23.057243', 'longitude': '113.387294', 'distance': None, 'hitags': None, 'resumeProcessRate': 6, 'resumeProcessDay': 1, 'score': 6, 'newScore': 0.0, 'matchScore': 1.7977986, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 1, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 6818007, 'positionName': 'Python开发工程师', 'companyId': 475744, 'companyFullName': '广州悦谦科技有限公司', 'companyShortName': '悦谦科技', 'companyLogo': 'i/image2/M01/AB/79/CgotOVvtOj-AFKj9AAAt6fuwzro591.jpg', 'companySize': '50-150人', 'industryField': '移动互联网', 'financeStage': '不需要融资', 'companyLabelList': ['绩效奖金', '股票期权', '定期体检', '带薪年假'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['移动互联网', '互联网金融', 'Python'], 'industryLables': ['移动互联网', '互联网金融', 'Python'], 'createTime': '2020-09-11 15:50:15', 'formatCreateTime': '3天前发布', 'city': '广州', 'district': '海珠区', 'businessZones': ['客村', '新港', '赤岗'], 'salary': '15k-30k', 'salaryMonth': '0', 'workYear': '3-5年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '双休 扁平化管理 发展平台好 团队氛围好', 'imState': 'today', 'lastLogin': '2020-09-14 14:51:25', 'publisherId': 12035286, 'approve': 1, 'subwayline': '3号线', 'stationname': '赤岗', 'linestaion': '3号线_客村;3号线_广州塔;8号线_客村;8号线_赤岗', 'latitude': '23.093925', 'longitude': '113.323383', 'distance': None, 'hitags': None, 'resumeProcessRate': 69, 'resumeProcessDay': 1, 'score': 2, 'newScore': 0.0, 'matchScore': 1.0956733, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 7703835, 'positionName': 'python', 'companyId': 120956340, 'companyFullName': '链乎(广州)科技有限公司', 'companyShortName': '链乎科技', 'companyLogo': 'i/image/M00/49/9A/CgqCHl9PXYCAXShTAAHfO5yhd7c192.jpg', 'companySize': '少于15人', 'industryField': '软件开发', 'financeStage': '未融资', 'companyLabelList': ['领导好', '弹性工作', '技能培训', '管理规范'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python', '后端'], 'positionLables': ['后端'], 'industryLables': [], 'createTime': '2020-09-11 11:15:19', 'formatCreateTime': '3天前发布', 'city': '广州', 'district': '天河区', 'businessZones': ['珠江新城'], 'salary': '10k-15k', 'salaryMonth': '0', 'workYear': '3-5年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '办公氛围轻松、同事好相处、年轻团队', 'imState': 'today', 'lastLogin': '2020-09-14 15:42:06', 'publisherId': 18835015, 'approve': 1, 'subwayline': '3号线', 'stationname': '岗顶', 'linestaion': '3号线_石牌桥;3号线_岗顶;5号线_猎德;5号线_潭村', 'latitude': '23.124555', 'longitude': '113.339788', 'distance': None, 'hitags': None, 'resumeProcessRate': 72, 'resumeProcessDay': 1, 'score': 1, 'newScore': 0.0, 'matchScore': 1.0397716, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 6578596, 'positionName': 'PTBU-后端开发工程师(python)', 'companyId': 336, 'companyFullName': '广州酷狗计算机科技有限公司', 'companyShortName': '酷狗音乐', 'companyLogo': 'i/image/M00/30/0E/CgpFT1k5D_yADEvSAAAWVK2XbLY366.jpg', 'companySize': '500-2000人', 'industryField': '文娱丨内容', 'financeStage': '上市公司', 'companyLabelList': ['技能培训', '节日礼物', '年底双薪', '带薪年假'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': [], 'positionLables': ['音乐', '直播'], 'industryLables': ['音乐', '直播'], 'createTime': '2020-09-12 15:02:47', 'formatCreateTime': '2天前发布', 'city': '广州', 'district': '天河区', 'businessZones': ['棠下', '天园', '车陂'], 'salary': '20k-35k', 'salaryMonth': '0', 'workYear': '3-5年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '年终奖金、五险一金、三餐补贴、周末双休', 'imState': 'disabled', 'lastLogin': '2020-09-14 15:00:24', 'publisherId': 7339435, 'approve': 1, 'subwayline': '5号线', 'stationname': '车陂南', 'linestaion': '4号线_车陂;4号线_车陂南;5号线_科韵路;5号线_车陂南', 'latitude': '23.118109', 'longitude': '113.38321', 'distance': None, 'hitags': None, 'resumeProcessRate': 36, 'resumeProcessDay': 1, 'score': 1, 'newScore': 0.0, 'matchScore': 0.6104466, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': True, 'detailRecall': False}, {'positionId': 7552538, 'positionName': 'python开发', 'companyId': 209072, 'companyFullName': '广州德惟科技有限公司', 'companyShortName': '德惟科技', 'companyLogo': 'i/image3/M00/06/7E/CgpOIFpgBeKASr9NAAAeG2k-uYc489.jpg', 'companySize': '150-500人', 'industryField': '金融,移动互联网', 'financeStage': '不需要融资', 'companyLabelList': [], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python', '数据库'], 'positionLables': ['Python', '数据库'], 'industryLables': [], 'createTime': '2020-09-09 16:36:33', 'formatCreateTime': '2020-09-09', 'city': '广州', 'district': '天河区', 'businessZones': None, 'salary': '9k-15k', 'salaryMonth': '0', 'workYear': '1-3年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '包餐,团队大型,技术牛人多,金融行业标杆', 'imState': 'today', 'lastLogin': '2020-09-14 14:52:27', 'publisherId': 14964085, 'approve': 1, 'subwayline': '3号线', 'stationname': '妇儿中心', 'linestaion': '1号线_体育西路;1号线_体育中心;3号线_珠江新城;3号线_体育西路;3号线_石牌桥;3号线(北延段)_体育西路;5号线_五羊邨;5号线_珠江新城;5号线_猎德;APM线_海心沙;APM线_大剧院;APM线_花城大道;APM线_妇儿中心;APM线_黄埔大道;APM线_天河南;APM线_体育中心南', 'latitude': '23.123985', 'longitude': '113.326318', 'distance': None, 'hitags': None, 'resumeProcessRate': 0, 'resumeProcessDay': 0, 'score': 1, 'newScore': 0.0, 'matchScore': 0.75467294, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 7685943, 'positionName': 'python开发工程师', 'companyId': 35745, 'companyFullName': '京信通信系统(中国)有限公司', 'companyShortName': '京信通信', 'companyLogo': 'image1/M00/00/55/Cgo8PFTUXR-AMKqQAAA4J7rdHkY651.png', 'companySize': '2000人以上', 'industryField': '企业服务', 'financeStage': '上市公司', 'companyLabelList': ['节日礼物', '绩效奖金', '岗位晋升', '年度旅游'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['Python'], 'industryLables': [], 'createTime': '2020-09-08 12:15:27', 'formatCreateTime': '2020-09-08', 'city': '广州', 'district': '黄埔区', 'businessZones': None, 'salary': '10k-13k', 'salaryMonth': '0', 'workYear': '1-3年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '来这里,点亮人生,绽放你的精彩', 'imState': 'today', 'lastLogin': '2020-09-14 10:19:30', 'publisherId': 11763841, 'approve': 1, 'subwayline': None, 'stationname': None, 'linestaion': None, 'latitude': '23.17004', 'longitude': '113.432959', 'distance': None, 'hitags': None, 'resumeProcessRate': 11, 'resumeProcessDay': 1, 'score': 1, 'newScore': 0.0, 'matchScore': 0.6708204, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 4445175, 'positionName': 'Python高级开发工程师', 'companyId': 364753, 'companyFullName': '青岛英联艺术传媒有限公司', 'companyShortName': 'Arts Alliance Media(中国)', 'companyLogo': 'i/image/M00/88/0D/CgpFT1rXHeuAP-Z9AABKonw2ZR0980.png', 'companySize': '50-150人', 'industryField': '数据服务', 'financeStage': '未融资', 'companyLabelList': [], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': '其他后端开发', 'skillLables': ['Python'], 'positionLables': ['Python'], 'industryLables': [], 'createTime': '2020-09-11 18:01:55', 'formatCreateTime': '3天前发布', 'city': '广州', 'district': '荔湾区', 'businessZones': None, 'salary': '15k-26k', 'salaryMonth': '0', 'workYear': '3-5年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '高效团队', 'imState': 'today', 'lastLogin': '2020-09-14 14:09:23', 'publisherId': 10573054, 'approve': 1, 'subwayline': '1号线', 'stationname': '文化公园', 'linestaion': '1号线_芳村;6号线_文化公园', 'latitude': '23.097062', 'longitude': '113.244207', 'distance': None, 'hitags': None, 'resumeProcessRate': 43, 'resumeProcessDay': 2, 'score': 0, 'newScore': 0.0, 'matchScore': 0.45168573, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 7660903, 'positionName': 'python开发工程师', 'companyId': 177718, 'companyFullName': '深圳市冰芒果科技有限公司', 'companyShortName': '冰芒果', 'companyLogo': 'i/image/M00/5B/14/CgpFT1mNoXeAaXDFAAAwQNlRT6A411.png', 'companySize': '150-500人', 'industryField': '移动互联网,金融', 'financeStage': '天使轮', 'companyLabelList': ['绩效奖金', '弹性工作', '五险一金', '股票期权'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['Python'], 'industryLables': [], 'createTime': '2020-09-05 17:51:22', 'formatCreateTime': '2020-09-05', 'city': '广州', 'district': '番禺区', 'businessZones': None, 'salary': '8k-13k', 'salaryMonth': '0', 'workYear': '1-3年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '弹性工作制 六险一金', 'imState': 'disabled', 'lastLogin': '2020-09-14 13:54:29', 'publisherId': 6766999, 'approve': 1, 'subwayline': None, 'stationname': None, 'linestaion': None, 'latitude': '22.936378', 'longitude': '113.369721', 'distance': None, 'hitags': None, 'resumeProcessRate': 1, 'resumeProcessDay': 1, 'score': 0, 'newScore': 0.0, 'matchScore': 0.59255797, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 7683241, 'positionName': 'python开发工程师', 'companyId': 278440, 'companyFullName': '广州小米加步枪网络科技有限公司', 'companyShortName': '小米加步枪', 'companyLogo': 'i/image3/M00/31/BA/Cgq2xlqjcdyAYOtDAAFBxcuCqcs545.jpg', 'companySize': '15-50人', 'industryField': '金融,游戏', 'financeStage': '天使轮', 'companyLabelList': ['绩效奖金', '股票期权', '弹性工作', '领导好'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['分布式', 'Python', '后端', 'Shell'], 'positionLables': ['分布式', 'Python', '后端', 'Shell'], 'industryLables': [], 'createTime': '2020-09-08 11:12:23', 'formatCreateTime': '2020-09-08', 'city': '广州', 'district': '天河区', 'businessZones': ['天河北'], 'salary': '10k-18k', 'salaryMonth': '0', 'workYear': '3-5年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '双月最多可以拿到120%的绩效奖金', 'imState': 'today', 'lastLogin': '2020-09-14 14:11:54', 'publisherId': 2139289, 'approve': 1, 'subwayline': '3号线', 'stationname': '华师', 'linestaion': '3号线_岗顶;3号线_华师', 'latitude': '23.140602', 'longitude': '113.344488', 'distance': None, 'hitags': None, 'resumeProcessRate': 6, 'resumeProcessDay': 1, 'score': 0, 'newScore': 0.0, 'matchScore': 0.6708204, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 6582692, 'positionName': 'Python开发工程师', 'companyId': 158991, 'companyFullName': '广州市云润大数据服务有限公司', 'companyShortName': '广州市云润大数据', 'companyLogo': 'i/image/M00/75/90/CgqKkVgz-VWAYMAWAAAMxSzTkzA423.png', 'companySize': '150-500人', 'industryField': '数据服务,移动互联网', 'financeStage': 'A轮', 'companyLabelList': [], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python', 'Hadoop', 'docker', 'Linux/Unix'], 'positionLables': ['云计算', '大数据', 'Python', 'Hadoop', 'docker', 'Linux/Unix'], 'industryLables': ['云计算', '大数据', 'Python', 'Hadoop', 'docker', 'Linux/Unix'], 'createTime': '2020-09-10 15:39:27', 'formatCreateTime': '2020-09-10', 'city': '广州', 'district': '天河区', 'businessZones': ['棠下'], 'salary': '8k-15k', 'salaryMonth': '0', 'workYear': '3-5年', 'jobNature': '全职', 'education': '大专', 'positionAdvantage': '周末双休 五险一金 专业培训', 'imState': 'sevenDays', 'lastLogin': '2020-09-10 14:55:54', 'publisherId': 15550697, 'approve': 1, 'subwayline': '5号线', 'stationname': '车陂南', 'linestaion': '4号线_车陂;4号线_车陂南;5号线_科韵路;5号线_车陂南', 'latitude': '23.125946', 'longitude': '113.388807', 'distance': None, 'hitags': None, 'resumeProcessRate': 0, 'resumeProcessDay': 0, 'score': 0, 'newScore': 0.0, 'matchScore': 0.8720665, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 7659233, 'positionName': 'Python开发工程师', 'companyId': 125922, 'companyFullName': '广东紫晶信息存储技术股份有限公司', 'companyShortName': '广东紫晶', 'companyLogo': 'i/image/M00/39/2E/Ciqc1F8ffnyAQJRPAAANyRcklQ8336.jpg', 'companySize': '150-500人', 'industryField': '数据服务,其他', 'financeStage': '未融资', 'companyLabelList': ['五险一金', '工龄工资', '上市公司'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['C++', 'Java'], 'positionLables': ['C++', 'Java'], 'industryLables': [], 'createTime': '2020-09-02 15:21:11', 'formatCreateTime': '2020-09-02', 'city': '广州', 'district': '番禺区', 'businessZones': None, 'salary': '9k-14k', 'salaryMonth': '0', 'workYear': '1-3年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '上市公司&五险一金&周末双休', 'imState': 'today', 'lastLogin': '2020-09-14 14:50:11', 'publisherId': 15024490, 'approve': 1, 'subwayline': None, 'stationname': None, 'linestaion': None, 'latitude': '22.978368', 'longitude': '113.370829', 'distance': None, 'hitags': None, 'resumeProcessRate': 38, 'resumeProcessDay': 1, 'score': 0, 'newScore': 0.0, 'matchScore': 0.57019734, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}, {'positionId': 6727278, 'positionName': 'python开发工程师', 'companyId': 329, 'companyFullName': '网易(杭州)网络有限公司', 'companyShortName': '网易', 'companyLogo': 'i/image3/M01/6A/43/Cgq2xl5UxfqAF56ZAABL2r1NdMU394.png', 'companySize': '2000人以上', 'industryField': '电商', 'financeStage': '上市公司', 'companyLabelList': ['节日礼物', '技能培训', '免费班车', '带薪年假'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['Python'], 'industryLables': [], 'createTime': '2020-09-09 10:54:35', 'formatCreateTime': '2020-09-09', 'city': '广州', 'district': '天河区', 'businessZones': None, 'salary': '15k-30k', 'salaryMonth': '0', 'workYear': '不限', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '6险1金,带薪年假,免费猪厂食堂,16薪', 'imState': 'sevenDays', 'lastLogin': '2020-09-10 15:05:21', 'publisherId': 7406615, 'approve': 1, 'subwayline': '5号线', 'stationname': '科韵路', 'linestaion': '5号线_科韵路', 'latitude': '23.126291', 'longitude': '113.37322', 'distance': None, 'hitags': None, 'resumeProcessRate': 48, 'resumeProcessDay': 1, 'score': 0, 'newScore': 0.0, 'matchScore': 0.7323122, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': True, 'detailRecall': False}, {'positionId': 7571322, 'positionName': 'python开发工程师', 'companyId': 329, 'companyFullName': '网易(杭州)网络有限公司', 'companyShortName': '网易', 'companyLogo': 'i/image3/M01/6A/43/Cgq2xl5UxfqAF56ZAABL2r1NdMU394.png', 'companySize': '2000人以上', 'industryField': '电商', 'financeStage': '上市公司', 'companyLabelList': ['节日礼物', '技能培训', '免费班车', '带薪年假'], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['Python'], 'industryLables': [], 'createTime': '2020-08-27 19:21:59', 'formatCreateTime': '2020-08-27', 'city': '广州', 'district': '天河区', 'businessZones': None, 'salary': '15k-25k', 'salaryMonth': '16', 'workYear': '1-3年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '16薪,平台大,大牛多', 'imState': 'today', 'lastLogin': '2020-09-14 15:16:12', 'publisherId': 6213860, 'approve': 1, 'subwayline': '5号线', 'stationname': '科韵路', 'linestaion': '5号线_科韵路', 'latitude': '23.126291', 'longitude': '113.37322', 'distance': None, 'hitags': None, 'resumeProcessRate': 100, 'resumeProcessDay': 1, 'score': 0, 'newScore': 0.0, 'matchScore': 0.559017, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': True, 'detailRecall': False}, {'positionId': 7636013, 'positionName': 'python开发工程师', 'companyId': 117504394, 'companyFullName': '健康互联(广州)信息科技股份有限公司', 'companyShortName': '健康互联', 'companyLogo': 'i/image3/M01/5B/70/CgpOIF4EahWAa_DzAAAUbVXU9vU336.png', 'companySize': '15-50人', 'industryField': '医疗丨健康,软件开发', 'financeStage': '不需要融资', 'companyLabelList': [], 'firstType': '开发|测试|运维类', 'secondType': '后端开发', 'thirdType': 'Python', 'skillLables': ['Python'], 'positionLables': ['大数据', 'Python'], 'industryLables': ['大数据', 'Python'], 'createTime': '2020-08-28 11:31:38', 'formatCreateTime': '2020-08-28', 'city': '广州', 'district': '天河区', 'businessZones': None, 'salary': '10k-15k', 'salaryMonth': '0', 'workYear': '1-3年', 'jobNature': '全职', 'education': '本科', 'positionAdvantage': '专业大数据团队', 'imState': 'today', 'lastLogin': '2020-09-14 10:20:04', 'publisherId': 12307769, 'approve': 1, 'subwayline': '3号线', 'stationname': '杨箕', 'linestaion': '1号线_杨箕;1号线_体育西路;1号线_体育中心;3号线_珠江新城;3号线_体育西路;3号线_石牌桥;3号线(北延段)_体育西路;5号线_杨箕;5号线_五羊邨;5号线_珠江新城;5号线_猎德;APM线_大剧院;APM线_花城大道;APM线_妇儿中心;APM线_黄埔大道;APM线_天河南;APM线_体育中心南', 'latitude': '23.125234', 'longitude': '113.321916', 'distance': None, 'hitags': None, 'resumeProcessRate': 0, 'resumeProcessDay': 0, 'score': 0, 'newScore': 0.0, 'matchScore': 0.559017, 'matchScoreExplain': None, 'query': None, 'explain': None, 'isSchoolJob': 0, 'adWord': 0, 'plus': None, 'pcShow': 0, 'appShow': 0, 'deliver': 0, 'gradeDescription': None, 'promotionScoreExplain': None, 'isHotHire': 0, 'count': 0, 'aggregatePositionIds': [], 'promotionType': None, 'famousCompany': False, 'detailRecall': False}], 'locationInfo': {'city': '广州', 'district': None, 'businessZone': None, 'isAllhotBusinessZone': False, 'locationCode': None, 'queryByGisCode': False}, 'queryAnalysisInfo': {'positionName': 'python', 'companyName': None, 'industryName': None, 'usefulCompany': False, 'jobNature': None}, 'strategyProperty': {'name': 'dm-csearch-personalPositionLayeredStrategyNew', 'id': 0}, 'hotLabels': None, 'hiTags': None, 'benefitTags': None, 'industryField': None, 'companySize': None, 'positionName': None, 'totalCount': 69, 'triggerOrSearch': False, 'categoryTypeAndName': {'3': 'Python'}}, 'pageSize': 15}, 'resubmitToken': None, 'requestId': None}

"""

2.3.解析字典,获得特定数据

list_con = response['content']['positionResult']['result']
info_list = []
for i in list_con:
   info = []
   info.append(i.get('companyShortName', '无'))  # 公司名
   info.append(i.get('companyFullName', '无'))
   info.append(i.get('industryField', '无'))   # 行业领域
   info.append(i.get('companySize', '无'))  # 公司规模
   info.append(i.get('salary', '无'))   # 薪资
   info.append(i.get('city', '无'))
   info.append(i.get('education', '无'))   # 学历
   info_list.append(info)

print(info_list)
"""
[['深圳道乐', '深圳道乐科技有限公司', '移动互联网,金融', '150-500人', '2k-3k', '广州', '本科'], ['咪佰科技', '广州市咪佰信息科技有限公司', '移动互联网,广告营销', '少于15人', '8k-12k', '广州', '本科'], ['悦谦科技', '广州悦谦科技有限公司', '移动互联网', '50-150人', '15k-30k', '广州', '本科'], ['链乎科技', '链乎(广州)科技有限公司', '软件开发', '少于15人', '10k-15k', '广州', '本科'], ['酷狗音乐', '广州酷狗计算机科技有限公司', '文娱丨内容', '500-2000人', '20k-35k', '广州', '本科'], ['德惟科技', '广州德惟科技有限公司', '金融,移动互联网', '150-500人', '9k-15k', '广州', '本科'], ['京信通信', '京信通信系统(中国)有限公司', '企业服务', '2000人以上', '10k-13k', '广州', '本科'], ['Arts Alliance Media(中国)', '青岛英联艺术传媒有限公司', '数据服务', '50-150人', '15k-26k', '广州', '本科'], ['冰芒果', '深圳市冰芒果科技有限公司', '移动互联网,金融', '150-500人', '8k-13k', '广州', '本科'], ['小米加步枪', '广州小米加步枪网络科技有限公司', '金融,游戏', '15-50人', '10k-18k', '广州', '本科'], ['广州市云润大数据', '广州市云润大数据服务有限公司', '数据服务,移动互联网', '150-500人', '8k-15k', '广州', '大专'], ['广东紫晶', '广东紫晶信息存储技术股份有限公司', '数据服务,其他', '150-500人', '9k-14k', '广州', '本科'], ['网易', '网易(杭州)网络有限公司', '电商', '2000人以上', '15k-30k', '广州', '本科'], ['网易', '网易(杭州)网络有限公司', '电商', '2000人以上', '15k-25k', '广州', '本科'], ['健康互联', '健康互联(广州)信息科技股份有限公司', '医疗丨健康,软件开发', '15-50人', '10k-15k', '广州', '本科']]

"""

2.4.获得多个页面的数据

import random
import time

import requests
from openpyxl import Workbook

import pymysql.cursors

"""
lagou网爬取
"""

def get_conn():
   '''建立数据库连接'''
   conn = pymysql.connect(host='localhost', user='root', password='123456', db='python_job',
                          charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
   return conn


def insert(conn, info):
   '''数据写入数据库'''
   with conn.cursor() as cursor:
       sql = "INSERT INTO python_jobs (shortname, fullname, industryfield, companySize, salary, city, education) VALUES (%s, %s, %s, %s, %s, %s, %s)"
       cursor.execute(sql, info)
   conn.commit()

header = {
     
    'User-Agent': 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
    'Accept': 'application/json, text/javascript, */*; q=0.01'
}

def get_json(url, page, lang_name, s, cookie):
   '''返回当前页面的信息列表'''
   data = {
     'first': 'false', 'pn': page, 'kd': lang_name}
   json = s.post(url, data=data, headers=header, cookies=cookie, timeout=5).json()

   print(json)

   list_con = json['content']['positionResult']['result']
   info_list = []
   for i in list_con:
       info = []
       info.append(i.get('companyShortName', '无'))  # 公司名
       info.append(i.get('companyFullName', '无'))
       info.append(i.get('industryField', '无'))   # 行业领域
       info.append(i.get('companySize', '无'))  # 公司规模
       info.append(i.get('salary', '无'))   # 薪资
       info.append(i.get('city', '无'))
       info.append(i.get('education', '无'))   # 学历
       info_list.append(info)
   return info_list   # 返回列表


def main():
   # 要爬取的语言
   lang_name = 'python'
   # 数据的保存
   wb = Workbook()  # 打开 excel 工作簿
   conn = get_conn()  # 建立数据库连接  不存数据库 注释此行
   # --------------------
   # 获得cookies
   urls = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
   s = requests.Session()
   # 获取搜索页的cookies
   s.get(urls, headers=header, timeout=3)
   # 为此次获取的cookies
   cookie = s.cookies
   # excel的使用
   ws1 = wb.active
   ws1.title = lang_name
   # 要爬取的网址
   url = 'https://www.lagou.com/jobs/positionAjax.json?city=广州&needAddtionalResult=false'
   page = 1

   while page < 31:   # 每个城市30页信息
       print('url', url)
       # exit(0)
       info = get_json(url, page, lang_name, s, cookie)
       page += 1
       # 调节爬虫间隔
       time.sleep(random.randint(10, 20))
       # 把数据保存到数据库和excel中
       for row in info:
           insert(conn, tuple(row))  # 插入数据库,若不想存入 注释此行
           ws1.append(row)
   conn.close()  # 关闭数据库连接,不存数据库 注释此行
   wb.save('{}职位信息.xlsx'.format(lang_name))  # 保存excel

if __name__ == '__main__':
   main()

3.数据库的建立

3.1.数据库服务的启动

sudo service mysql start

3.2.登录数据库

mysql -u root -p

3.3.创建数据库python_job,建立数据表python_jobs,插入数据的sql语句

数据库:
CREATE DATABASE python_job;
use python_job;
CREATE TABLE python_jobs(shortname text(2000),fullname text(2000),industryfield text(2000),companySize text(2000),salary text(2000),city text(2000),education text(2000));
“INSERT INTO python_jobs (shortname, fullname, industryfield, companySize, salary, city, education) VALUES (%s, %s, %s, %s, %s, %s, %s)”

3.4.数据库出现的错误

pymysql.err.InternalError: (1366, “Incorrect string value: ‘\xE7\x9C\x81\xE7\x9C\x81…’ for column ‘shortname’ at row 1”)

解决方法:运行命令 mysql> alter table 表名 convert to character set utf8mb4;

4.结果

爬虫入门(3)——拉钩网_第9张图片
爬虫入门(3)——拉钩网_第10张图片

5.reference

https://mp.weixin.qq.com/s/8wAHBPnQMbcrP9La7WZiJA

你可能感兴趣的:(爬虫,ajax)