在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:拉钩网数据爬虫开源软件地址:https://gitee.com/XksA-me/lagou_data_spider开源软件介绍:拉钩网数据爬虫项目介绍爬取拉勾网数据,并进行数据分析,可视化,分析你的专业最适合去那个城市,那个岗位最火热。
一、学习开始前需安装模块pip install requestspip install cvspip install pandaspip install numpypip install jiebapip install repip install pyechartspip install os 二、讲解概要
三、正式开始,竖起你的小眼睛爬取拉勾网求职信息(1)requests 请求,获取单页面# 我们最常用的流程:网页上复制url->发送get请求—>打印页面内容->分析抓取数据# 1.获取拉钩网urlreq_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) 由上面的流程,打印输出结果如下: <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="renderer" content="webkit"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <script type="text/javascript" src="https://www.lagou.com/utrack/trackMid.js?version=1.0.0.3&t=1529144464"></script> <body> <input type="hidden" id="KEY" value="VAfyhYrvroX6vLr5S9WNrP16ruYI6aYOZIwLSgdqTWc"/> <script type="text/javascript">HZRxWevI();</script>é?μé?¢?? è????-... <script type="text/javascript" src="https://www.lagou.com/upload/oss.js"></script> </body></html> 看的出来,与我们想象的还是差别很大。为什么会出现这种情况,很简单,因为它并不是简单的静态页面,我们知道请求方式有get和post请求两种基本区别如下: (1)Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。GET和POST只是发送机制不同,并不是一个取一个发.(2)GET请求时其发送的信息是以url明文发送的,其参数会被保存在浏览器历史或web服务器中,而post则不会某(这也是后面我们翻页的时候发现拉勾网翻页时 浏览器 url栏地址没有变化的原因。) (2)分析页面加载,找到数据
我们会发现,我们需要的数据全在: (3)添加headers 信息,模仿浏览器请求 通过上面的请求分析我们可以找到 {'success': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '122.xxx.xxx.xxx'} 出现这种提示的原因是,我们直接 (4)解析页面,实现翻页爬取
data = { 'first':'true', # 是不是第一页,false表示不是,true 表示是 'kd':'Python', # 搜索关键字 'pn':1 # 页码 } 现阶段代码: import requests# 1. post 请求的 urlreq_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'# 2. 请求头 headersheaders = {'你的请求头'}# 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数据可视化
# 薪资分析,下面的几个都是柱状图,和这个地方分析一样# 统计各个城市出现次数salary_lists = {}for x in city: salary_lists[x] = salary.count(x)key = []values = []for k,v in salary_lists.items(): key.append(k) values.append(v)bar2 = Bar('求职信息数据化','需求量',page_title='薪资分布')# 图表其他主题:vintage,macarons,infographic,shine,romabar2.use_theme('vintage')bar2.add('薪资',key,values,is_more_utils = True,is_datazoom_show = True,xaxis_interval=0, xaxis_rotate=30, yaxis_rotate=30)bar2.render()
# 和下面福利关键词的分析差不多,大家可以自己试着写写。
# 福利关键词分析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)wordcloud.add("福利关键词", codes, counts, word_size_range=[20, 100])wordcloud.render()
作为一名python程序员,我打算以后去北京、上海、深圳发展,主要从事开发工作,我学历,emmmm |
请发表评论