网页视频抓取软件 格式工厂(数据爬取爬取拉勾网求职信息,废话不多说。)
优采云 发布时间: 2022-01-02 06:18网页视频抓取软件 格式工厂(数据爬取爬取拉勾网求职信息,废话不多说。)
前言
利用requests抓取拉勾求职信息,废话不多说。
让我们快乐开始吧~
开发工具
**Python 版本:**3.6.4
相关模块:
请求模块;
重新模块;
操作系统模块
结巴模块;
熊猫模块
numpy 模块
pyecharts 模块;
还有一些 Python 自带的模块。
环境设置
安装Python并将其添加到环境变量中,pip安装所需的相关模块。
数据爬虫爬取拉勾网的求职信息1.requests request,获取单个页面
# 我们最常用的流程:网页上复制url->发送get请求—>打印页面内容->分析抓取数据
# 1.获取拉钩网url
req_url = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
# 2.发送get请求
req_result = requests.get(req_url)
# 3.打印请求结果
print(req_result.text)
复制代码
输出结果如下
HZRxWevI();é?μé?¢?? è????-...
复制代码
我们可以看到,上面的结果和我们想象的还是有很大的不同。为什么会出现上述情况?其实很简单,因为它不是一个简单的静态页面。我们知道请求方法有两个基本区别:get 和 post 请求。
(1)Get 是向服务器请求数据;Post 是向服务器提交数据的请求。要提交的数据位于消息头后面的实体中。GET 和 POST 只是发送的机制不同,取一个也不是一回事。(2)GET请求时,发送的信息是以url明文形式发送的,其参数会保存在浏览器历史或web服务器中,而帖子不会(这也是后来翻页的时候发现拉勾网翻页时浏览器url栏地址没有变化的原因。)
2.分析页面加载并找到数据
1.请求分析
在拉勾网首页,按F12进入开发者模式,然后在查询框中输入python,点击搜索,经过我的搜索,终于找到了页面上职位信息所在的页面,它确实是post请求,页面返回的内容是json格式的字典。
2.返回数据内容分析。页面上:我们主要获取7个数据(公司|城市|职位|薪资|*敏*感*词*要求|工作经验|职位优势)
json数据中:我整理了爬下来的json数据,如下图
我们会发现我们需要的所有数据都在req_info['content']['positionResult']['result']中,它是一个列表,收录了很多其他的信息。这次我们不关心其他数据。 我们需要的数据在下图
3.添加headers信息模仿浏览器请求
通过上面的请求分析,我们可以找到post请求的URL:...
{'success': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '122.xxx.xxx.xxx'}
复制代码
出现这个提示的原因是我们直接post访问网址,服务器会误认为我们是“机器人”。这也是反爬虫。解决方法很简单。添加请求头,完全模拟浏览器请求。 , 获取请求头如下图
4.分析页面实现翻页抓取
分析发现如下规律:在post请求中,有一个请求参数->表单数据,首先包括三个参数,kd,pn,通过*敏*感*词*演示,不难猜出其含义
data = {
'first':'true', # 是不是第一页,false表示不是,true 表示是 'kd':'Python', # 搜索关键字
'pn':1 # 页码
}
复制代码
代码
import requests\
# 1. post 请求的 url\
req_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'\
# 2. 请求头 headers\
headers = {'你的请求头'}\
# 3. for 循环请求\
for i in range(1,31):\
data = { 'first':'false','kd':'Python','pn':i} \
# 3.1 requests 发送请求\
req_result = requests.post(req_url,headers = headers,data = data) req_result.encoding = 'utf-8'\
# 3.2 获取数据\
req_info = req_result.json() \
# 打印出获取到的数据\
print(req_info)
复制代码
5.将抓取到的数据保存成csv文件
def file_do(list_info): # 获取文件大小 file_size = os.path.getsize(r'G:\lagou_test.csv') \
if file_size == 0: \
# 表头 name = ['公司','城市','职位','薪资','*敏*感*词*要求','工作经验','职位优点'] \
# 建立DataFrame对象 file_test = pd.DataFrame(columns=name, data=list_info) \
# 数据写入 file_test.to_csv(r'G:\lagou_test.csv', encoding='gbk',index=False) \
else: \
with open(r'G:\lagou_test.csv','a+',newline='') as file_test : # 追加到文件后面 writer = csv.writer(file_test) \
# 写入文件 writer.writerows(list_info)
复制代码
显示抓取的数据
数据可视化数据分析+pyechart数据可视化
薪酬分配分析
我们可以看到python的工资基本都是10k起的,大部分公司给的工资在10k-40k之间,所以不用怕学python不够。
2.工作地点分析
通过图表我们不难看出,大部分需要python程序员的公司都位于北京、上海、深圳,而广州则落后。所以学python的同学千万不要走错城市。
3.岗位教育要求
从图表来看,python程序员的*敏*感*词*要求不高,主要是本科。虽然*敏*感*词*要求不高,但要有思考能力。
4.工作经验要求
主要是需要3-5年工作经验的学生,不老不幼,成熟稳重,能学新东西的年纪,招聘公司真聪明。
5.岗位研究方向分析
6.工作福利的好处分析
# 福利关键词分析
content = ''
# 连接所有公司福利介绍
for x in positionAdvantage:
content = content + x
# 去除多余字符
content = re.sub('[,、(),1234567890;;&%$#@!~_=+]', '', content)
# jieba 切词,pandas、numpy计数
segment = jieba.lcut(content)
words_df = pd.DataFrame({'segment': segment})
words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})
words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False) test = words_stat.head(1000).values
# 制作词云图\
codes = [test[i][0] for i in range(0,len(test))]
counts = [test[i][1] for i in range(0,len(test))]
wordcloud = WordCloud(width=1300, height=620,page_title='福利关键词') wordcloud.add("福利关键词", codes, counts, word_size_range=[20, 100]) wordcloud.render()
复制代码
终于
感谢您的支持和厚爱。小编每天都会和大家分享更多Python学习知识,记得关注小编哦。