Python爬虫:爬取拉勾网职位信息存入excel

网络爬虫

浏览数:374

2019-1-29

校招进入火热状态,学人力资源管理的我想了解当前全国HR职位情况的相关数据,所以将近期爬虫目标瞄准了拉勾网 [坏笑]

前期准备

打开拉勾首页,按F12进入页面调试模式,关注network标签。我们要获取的是网站中所有HR岗位的相关信息,可以发现,所有数据都是通过json来传递的。

实现翻页

点击下一页,观察页面变化,可以发现每点击一个页面,就多了一个”position… .json”的请求,仔细观察,可以发现是post数据中pn(即PageNumber)发生了变化。

源代码

#!user/bin/python# 
-*- coding:utf-8 -*-
import json
import requests
import xlwt

#解决编码问题
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

#获取存储了职位信息的json对象,遍历获得公司名、职位、待遇等信息
def get_json(url,page): 
   datas = {"first": "true",           
            "pn": page,           #pn变化实现翻页
            "kd": "HR" }    
  s = requests.post(url, data=datas).json()    #reqquests获得json对象
  info_list = []    
  jcontent = s["content"]["positionResult"]["result"]    
  for i in jcontent:        
    info = []        
    info.append(i["companyFullName"])        
    info.append(i['companySize'])        
    info.append(i['positionName'])        
    info.append(i['education'])        
    info.append(i['financeStage'])        
    info.append(i['salary'])        
    info.append(i['city'])        
    info.append(i['district'])        
    info.append(i['positionAdvantage'])        
    info.append(i['workYear'])        
    info_list.append(info)    
    print json.dumps(info_list, ensure_ascii=False, indent=2)    
return info_list

#实现翻页,结果写入excel文件
def main():    
   url="http://www.lagou.com/jobs/positionAjax.jsonneedAddtionalResult=false"
   page=1    
   info_result=[]    
   title = ['公司全名', '公司规模', '职位名称', '教育程度', '融资情况', "薪资水平", "城市", "区域", "优势", "工作经验"]    
   info_result.append(title)    
   while page < 31:        
      info=get_json(url,page)        
      info_result=info_result+info        
      page+=1        
      workbook = xlwt.Workbook(encoding="utf-8")        
      booksheet = workbook.add_sheet('HR', cell_overwrite_ok=True)        
      for i, row in enumerate(info_result):            
           for j, col in enumerate(row):                
           booksheet.write(i, j, col)        
      workbook.save('HR.xls')

if __name__=="__main__":    
  main()

结果展示

自学Python四个月,写爬虫时参考了无数前辈大牛们的博客,如果没有他们的无私共享也就没有自己能运行成功的代码了。So,分享使人快乐。
欢迎各路大神提出建议共同交流,促进编程小白更快成长。O(∩_∩)O谢谢~
——以玩编程为乐的妹子一名

原文地址:https://www.jianshu.com/p/5cdd6e335ae8