Skip to content

用严肃的数据来回答“什么样的企业会到什么样的大学招聘”?

License

Notifications You must be signed in to change notification settings

WallfacerRZD/UniversityRecruitment-sSurvey

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

University Recruitment's Survey

How to Begin

  1. 配置开发环境python3, 建议配置redis,若未配置redis,则使用json文件存储数据
  2. Fork代码,通过pull request提交
  3. 查看大学名单 ,其中未添加链接的表示还没有爬取信息的大学,选择其中一个大学进行爬取
  4. 为了避免重复工作,请在正式开始爬取之前打开一个 issue, 告诉大家你要爬取的大学名称,并在爬取完成后在大学名单里添加相应的链接

一个关于大学校园招聘的数据调查

受张雪峰老师演讲的影响,“什么样的企业会到齐齐哈尔大学招聘,什么样的企业会到清华大学招聘?”
张雪峰老师演讲讲学历重不重要
仔细思考之后,决定用严肃的数据来回答这个严肃的问题
欢迎一起来搞事
它主要包含以下部分:

主要工作

  • 1.爬取各个大学的就业信息网,获取到各个大学校园内进行宣讲或招聘的企业名单
    注意是要获得进入大学进行宣讲或招聘的企业,而不是单纯的挂个通知的企业 (先爬100所大学吧)

  • 2.根据某种标准对企业进行划分

  • 3.数据分析

主要技术

  • python 爬虫,beatuifulSoup/Requests等库

  • 利用Redis进行存储(因为真的太方便了)

  • 数据格式全部使用Json Array
    数据格式 数据格式

已爬取的大学就业信息网(持续更新)

C9

985

211

一本

二本

已爬取的公司名单(持续更新)

其它

  • IT橘子网(可根据关键字查询IT公司的融资情况)

一个简单的爬虫教程(欢迎加入这个项目)

大学就业信息网的结构大多十分简单,也没有什么验证码机制,所以用来入门爬虫的话再合适不过了 下面以兰州大学为例,我们爬取到兰州大学进行招聘到企业名单

  • 1.首先,百度兰州大学就业信息网(基本上百度 xx大学就业信息网都能找到相应的网站),然后进去找到要到兰大进行宣讲大企业公示

  • 2.注意不要找发布招聘信息的企业,那些企业不一定会到兰大进行宣讲,与我们的目标不合,最终,找到的网页如下:

    兰大就业网专场招聘会

  • 3.打开浏览器开发者工具(推荐使用Chrome或火狐浏览器),选择network 进行查看,点击每一条请求,查看其Response, 如果response中包含我们想要的数据,就记录下这条链接。如下图:

    开发者模式

  • 4.因为通常一条请求中不会包含所有我们想要的数据,往往只有一页的数据,所以需要分析每条链接的构成规则,通常点击一下下一页或上一页,看浏览器中URL的变化,很快就明白了:

    URL URL

  • 5.如图,兰大的URL构成非常简单, 一共有50页,所以我们只需要循环构造 list_1.shtml这个参数就行

  • 6.可以开始写代码了,构造URL,构造请求头, 对返回的内容解码,解析交给BeautifulSoup来做:

      base_url = "http://job.lzu.edu.cn/htmlfile/article/list/119/list_"
      url_tail = ".shtml"
      host = "job.lzu.edu.cn"
      header = Util.get_header(host)
      max_page_num = 50
      req = requests.Session()
      re = Util.jedis()
      re.connect_redis()
      for i in range(1, max_page_num + 1):
      	url = base_url + str(i) + url_tail
      	html = req.get(headers=header, url=url).content.decode("utf-8")
      	parse_html(html, re)
      		print(i)
      re.add_university("lzu_company_info")
      print("finish")
    
  • 7.这样就获得了完整的网页内容,下面开始解析, 将网页内容转化为BeautifulSoup的对象, 通过刚刚对网页的分析可以发现,所有我们想要的数据都被包裹在li中,所以,使用soup.find_all("li"),得到下面这样的效果:

    debug

  • 8.因为网页中使用li包裹的还有很多我们不想要的数据,可以根据数据下标进行准确的截取,比如兰大这个网页中,我们想要的数据在数组的第 24 到 77,因为静态网页的格式十分固定,所以可以直接设置数组下标范围进行截取。

  • 9.通过debug(或者直接记住),这些标签中的文字信息,在.text属性中,如图:

    debug

  • 10.循环打印text,基本获得我们想要的数据:
    debug

  • 11.格式化数据格式,将日期与文字分开,并去掉空白行,将数据存储进Redis中。在redis中的所有数据都保存为json格式(相应函数封装在util.Jedis里面)
    redis

  • 12.这样,就完成了兰州大学的爬虫工作。大学网站大同小异,基本都是这种套路,具体的可以参考上面的源代码

  • 13.欢迎一起来玩,直接Fork这个项目提交pull request就行,我真的很想看看,什么样的企业会到什么样的大学去招聘

一些动态网页的爬取技巧

  • 强烈推荐使用火狐和Chrome浏览器,两者搭配干活不累

  • 1.动态网页的爬取着重分析URL和header的构成,建议在火狐浏览器下进行分析,因为火狐可以自动解析,方面读取,如图
    火狐浏览器解析

  • 2.动态网页的数据一般(只是一般)放在json格式的文件中,爬虫只需要获得该文件做解析就行。

  • 3.在找到了获得返回数据的url之后,可以在火狐浏览器上编辑重发链接,测试数据是否正常

  • 4.有个很bug的行为,很多大学(比如中南大学和中国科学技术大学)的网站,获取数据的参数里有个叫pageSize(大概就是指定一次返回多少数据的参数),见图:
    pageSize
    通常默认的是15或20这样的数字,表示一页返回15或20条数据,如果改变这个参数,比如直接设定为10000,那就能直接获得所有数据,就不用改变padeIndex发送多次请求了(就是说不用翻页了)
    pageSize

  • 5.留意http header里Referer这个参数,它表示请求从哪里传过去的,比如请求B网页的header包含网页A的URL,表示这个B网页必须从A网页跳转过去,如果header里没有这个参数的话,直接爬是爬不了的。

  • 6.需要登录的网站爬虫,一般使用cookie就行了,获取cookie的方式有很多,比如使用requests.Session(),但最简单的,用浏览器登录一遍再把cookie直接复制到header里就行了

  • 7.有些网站的URL构成看起来莫名其妙,需要花点时间去分析构成,这个时候可能需要一些编码转换,推荐站长转换工具.推荐使用Visual Studio Code来分析复杂的URL,因为它有一个很神奇的功能,见图:
    VSCode这样很容易发现规律

  • 8.不是所有复杂的URL都需要花时间去分析,因为那个参数可能根本就没多大影响,比如清华大学这个的,即使为空也不影响获取数据:
    callback

About

用严肃的数据来回答“什么样的企业会到什么样的大学招聘”?

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 85.6%
  • JavaScript 11.5%
  • HTML 2.8%
  • CSS 0.1%