前言
大家早好、午好、晚好吖~
环境使用:
- Python 3.8
- Pycharm —> 汉化插件 translation
模块使用:
- requests >>> pip install requests
- re
- json
- csv
如果安装python第三方模块:
-
win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
-
在pycharm中点击Terminal(终端) 输入安装命令
如不会添加可以添加Q裙;832157862找管理员小姐姐领取哦~(源码、解答也可找哦)
基本流程思路: <通用>
一. 数据来源分析
- 确定需求, 明确采集数据内容是什么?
- 通过开发者工具进行抓包分析, 分析数据来源, 请求那个url地址可以获取相关数据内容
I. F12或者鼠标右键点击检查 选择network 刷新网页
II. 通过关键字 搜索找相应数据包
二. 代码实现步骤
- 发送请求, 对于分析得到url地址发送请求 <模拟浏览器对于url发送请求>
- 获取数据, 获取response响应数据 —> 服务器返回响应数据
- 解析数据, 提取我们想要数据内容 —> zhaopin基本信息
- 保存数据, 保存表格里面
- 多页采集, 多页数据采集
代码
因审核机制原因,我把网址里的一些东西删掉了,小可耐们可以自己添加一下哈,很容易的
还有两个字,我用拼音代替了,你们可以改回文字哦 ~
如果有不太会改或者有点点小懒惰的小可耐也可以私信我,我发你呐~ ?
也可直接添加Q裙;832157862找管理员小姐姐领取哦~(教程、解答也可找哦)
# 导入数据请求模块 ---> 第三方模块 需要 pip install requests 导入模块没有使用 灰色
import requests
# 导入正则模块 ---> 内置模块 不需要安装
import re
# 导入json ---> 内置模块 不需要安装
import json
# 导入格式化输出模块 ---> 内置模块 不需要安装
import pprint
# 导入csv模块
import csv
# 导入时间模块
import time
# 导入随机模块
import random
源码、解答、教程加Q裙:832157862
# 创建文件
f = open('python zhaopin 10页.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'职位',
'公司名',
'薪资',
'城市',
'经验',
'学历',
'公司类型',
'公司规模',
'公司领域',
'福利待遇',
'发布日期',
'公司详情页',
'职位详情页',
])
# 写入表头
csv_writer.writeheader()
"""
1. 发送请求, 对于分析得到url地址发送请求 <模拟浏览器对于url发送请求>
模拟浏览器 ---> headers 在开发者工具里面headers下面的 requests headers里面
请求头, 字典数据类型, 要构建完整键值对
<Response [200]> 说明对于url地址发送请求成功了, 但是不一定得到你想要的数据
被反爬, 状态码可能还是200, 但是返回数据不是你想要的内容
"""
for page in range(1, 11):
print(f'----------------正在采集第{page}页数据内容----------------')
time.sleep(random.randint(1, 2))
# 确定url地址 --> 可以直接复制
url = f'list/010000%252C020000%252C030200%252C040000%252C090200,000000,0000,00,9,99,python,2,{page}.html'
# 模拟浏览器 headers 请求头 伪装
headers = {
# User-Agent 用户代理, 表示浏览器基本身份标识
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求 使用什么请求方式, 取决于开发者工具里的内容
response = requests.get(url=url, headers=headers)
# <Response [200]> 响应对象 200 状态码 请求成功
print(response)
# 获取数据, 获取服务器返回响应数据---> 获取文本数据 print(response.text)
"""
解析数据 ---> 提取我们想要数据内容
解析方法比较多: re css xpath json解析.... 如何选择方法 根据返回数据类型以及我想要数据内容情况
re.findall() 调用re模块里面findall方法
通过re模块找到所有我们想要数据内容 ---> 告诉它去哪里找, 找什么样数据
源码、解答、教程加Q裙:832157862
正则匹配提取出来数据, 返回列表 --->
"""
# 提取招聘数据 re.findall()
html_data = re.findall('window.__SEARCH_RESULT__ = (.*?)</script>', response.text)[0]
# 把字符串数据转成json字典数据
json_data = json.loads(html_data)
# print 打印字典数据, 一行展示 pprint.pprint 打印字典数据类型, 格式化展开的效果 print(json_data) pprint.pprint(json_data)
# 字典取值 ---> 根据键值对取值 根据冒号左边的内容[键], 提取冒号右边的内容[值]
# for循环遍历 把列表里面数据一个一个提取出来
for index in json_data['engine_jds']:
# 提取数据, 用字典 保存内容 学历是敲门砖, 技术才是铁饭碗.... 毕业出来 3500
dit = {
'职位': index['job_name'],
'公司名': index['company_name'],
'薪资': index['providesalary_text'],
'城市': index['workarea_text'],
'经验': index['attribute_text'][1],
'学历': index['attribute_text'][-1],
'公司类型': index['companytype_text'],
'公司规模': index['companysize_text'],
'公司领域': index['companyind_text'],
'福利待遇': index['jobwelf'],
'发布日期': index['issuedate'],
'公司详情页': index['company_href'],
'职位详情页': index['job_href'],
}
# 写入数据
csv_writer.writerow(dit)
print(dit)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
尾语
好了,我的这篇文章写到这里就结束啦!
有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!