拉勾网职位信息爬取

分析网页

通过浏览器查看网页源代码,未能找到职位信息,因此需要打开F12开发者工具抓包分析职位数据使怎样被加载到网页的。抓包后发现职位数据是通过js异步加载的,数据存在于XHR的json数据中。因此可以分析ajax请求,得到其头部信息,从而进行抓取。

抓包截图

爬取思路

  1. 通过抓包获取头部信息,再用requests获取返回的json数据,然后观察处理后得到职位信息
  2. 将抓取的信息写入Excel表保存

代码实现

  1. 通过抓包获取头部信息,再用requests获取返回的json数据,然后观察处理后得到职位信息
def get_job_list(data):
    url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E&' \
          'needAddtionalResult=false&isSchoolJob=0'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) ' \
                      'AppleWebKit/537.36 (KHTML, like Gecko)' \
                      'Chrome/50.0.2661.102 Safari/537.36',
        'Referer': 'https://www.lagou.com/jobs/list_python?'\
        'city=%E5%B9%BF%E5%B7%9E&cl=false&fromSearch=true&labelWords=&suginput=',
        'Cookie': 'user_trace_token=20170828211503-'\
        'e7456f80-8bf2-11e7-8a6b-525400f775ce;' \
        'LGUID=20170828211503-e74571a4-8bf2-11e7-8a6b-525400f775ce; '\
        'index_location_city=%E5%B9%BF%E5%B7%9E; '\
        'Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1503926479,1503926490,'\
        '1503926505,1505482427; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6'\
        '=1505482854; LGRID=20170915214052-7da8c649-9a1b-11e7-94ae-525400f775ce;'\
        ' _ga=GA1.2.1531463847.1503926105; _gid=GA1.2.1479848580.1505482430;'\
        'Hm_lvt_9d483e9e48ba1faa0dfceaf6333de846=1503926253,1503926294,'\
        '1503926301,1505482781; Hm_lpvt_9d483e9e48ba1faa0dfceaf6333de846='\
        '1505482855; TG-TRACK-CODE=search_code; '\
        'JSESSIONID=ABAAABAACBHABBIEDE54BE195ADCD6F900E8C2AE4DE5008; '\
        'SEARCH_ID=1d353f6b121b419eaa0e511784e0042e'
    }
    response = requests.post(url,data=data,headers=headers)
    jobs=response.json()['content']['positionResult']['result']
    return jobs
  1. 将抓取的信息写入Excel表
def excel_write(wb,style,jobs,name):
    ws = wb.add_sheet(name)
    headdata  = ['positionName','salary','city','district','workYear','education',
                 'companyFullName']
    datadict = {0:'positionName',1:'salary',2:'city',3:'district',
                4:'workYear',5:'education',6:'companyFullName'}
    for i in range(7):
        ws.write(0, i, headdata[i], style)
    index=1
    for i in jobs:
        for j in range(7):
            ws.write(index, j, i[datadict[j]])
        index += 1
  1. 爬取源码
# !/usr/bin/env python3.6
# coding:utf-8
# @Author : Natsume
# @Filename : lagoujob.py
'''
@Description:
拉勾网职位信息爬虫,修改post的data相关参数可以爬取任何职位的相关信息
'''
import requests
import xlwt
import time


# 获取json数据,并处理得到职位信息
def get_job_list(data):
    url = 'https://www.lagou.com/jobs/positionAjax.json?'\
          'city=%E5%B9%BF%E5%B7%9E&needAddtionalResult=false&isSchoolJob=0'
    headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) ' \
                      'AppleWebKit/537.36 (KHTML, like Gecko)' \
                      'Chrome/50.0.2661.102 Safari/537.36',
                'Referer': 'https://www.lagou.com/jobs/list_python?'\
                'city=%E5%B9%BF%E5%B7%9E&cl=false&fromSearch=true&labelWords=&suginput=',
                'Cookie': 'user_trace_token=20170828211503-'\
                'e7456f80-8bf2-11e7-8a6b-525400f775ce;' \
                'LGUID=20170828211503-e74571a4-8bf2-11e7-8a6b-525400f775ce; '\
                'index_location_city=%E5%B9%BF%E5%B7%9E; '\
                'Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1503926479,1503926490,'\
                '1503926505,1505482427; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6'\
                '=1505482854; LGRID=20170915214052-7da8c649-9a1b-11e7-94ae-525400f775'\
                ' ce;_ga=GA1.2.1531463847.1503926105; _gid=GA1.2.1479848580.1505482430;'\
                'Hm_lvt_9d483e9e48ba1faa0dfceaf6333de846=1503926253,1503926294,'\
                '1503926301,1505482781; Hm_lpvt_9d483e9e48ba1faa0dfceaf6333de846='\
                '1505482855; TG-TRACK-CODE=search_code; '\
                'JSESSIONID=ABAAABAACBHABBIEDE54BE195ADCD6F900E8C2AE4DE5008; '\
                'SEARCH_ID=1d353f6b121b419eaa0e511784e0042e' }         # 设置请求头部信息
    response = requests.post(url,data=data,headers=headers)
    jobs=response.json()['content']['positionResult']['result']        # 处理得到职位信息
    return jobs


#将抓取的职位信息写入Excel表
def excel_write(wb,style,jobs,name):
    ws = wb.add_sheet(name)
    headdata  = ['positionName','salary','city','district','workYear','education',
                 'companyFullName']
    datadict = {0:'positionName',1:'salary',2:'city',3:'district',
                4:'workYear',5:'education',6:'companyFullName'}
    for i in range(7):                       # 写入表头
        ws.write(0, i, headdata[i], style)
    index=1
    for i in jobs:                           #
        for j in range(7):
            ws.write(index, j, i[datadict[j]])
        index += 1


#设置写入字体样式
def set_style():
    style = xlwt.XFStyle()
    font = xlwt.Font()
    font.bold = True
    font.italic = False
    font.name = '宋体'
    style.font = font
    return style


# 设置post请求的头部数据
def get_data(i,x):
    data = {
        'first': 'false',
        'pn':str(i),
        'kd':x
    }
    return data

# 爬虫执行入口
if __name__ == '__main__':
    wb = xlwt.Workbook(encoding='utf-8')
    for i in range(1,9):
        kd = 'python'
        data = get_data(i,kd)
        jobs = get_job_list(data)
        style = set_style()
        excel_write(wb,style,jobs,data['kd']+str(i))
        time.sleep(1)
        print(i)
    savepath = 'D:/pythonjob/{}拉勾网.xls'.format(kd)
    wb.save(savepath)

爬取结果

爬取结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容