爬虫文件

原理

1、分析
智联招聘网是招聘网站中爬取难度最高的网站。为了减轻爬虫对网站运营的影响,要求用户必须注册登录,否则提示登录后才能进行信息检索。
智联招聘网的页面布局以及列表页请求url。注册登录后,职位搜索列表页和详情页如图1、图2所示。

图1 智联招聘网职位搜索列表页

图2智联招聘网职位搜索详情页
2.爬虫数据存储设计
对于爬虫来说,最重要的是爬取下来的数据,所以爬虫项目在开发前需要考虑数据的保存格式以及保存的数据项。前期预估网站爬取的数据在 10 万以内,数据量较小,所以考虑采用 CSV 等文本格式或 MySQL 数据库进行存储。
如果采用 CSV 文本格式进行存储,在数据清洗前还要考虑数据合并。
结合需求分析中的数据分析目标,分析前程无忧、猎聘网、智联招聘三个招聘网站的岗位的数据,确定数据采集项。利用数据库中的表结构设计形式进行展示每个数据项的含义及作用。
最后进行数据库设计,在mysql数据库实现表的创建。
内容:
1.分析招聘网站每条招聘信息的内容,确定爬虫数据项,以数据库表结构形式进行展示。
2.确定数据存储格式,在scrapy项目中编写数据存储的相关代码。

页面分析

按要求完成注册后,正常情况下输入用户名和密码后可以直接登录。如果被网站识别为异常登录或频繁登录会出现拼图验证码,直接就提升了我们爬虫编写的难度。智联招聘网的拼图验证码调用的是第三方的API,破解难度较大。也就是意味着通过代码实现模拟登录并破解拼图验证码的代价较大。
进一步思考,HTTP协议是无状态的协议,如果要实现状态保持势必要用到Session或Cookies,Session又是基于Cookies实现的。通俗的讲,网站判定用户是否登录,是基于客户端发送请求时是否传递Cookies来进行验证的。也就是说我们可以人为进行网站登录,然后通过程序代码读取网站生成的Cookies,在发送请求时传递Cookies,这样就可以通过登录验证,从而降低爬虫编写的难度。由于Cookie有时间限制,也就意味着启动爬虫前最好重新进行登录。
打开浏览器开发者工具,切换到“Network”,在列表页的搜索框中输入检索关键字,点击“搜索”图标。选择“XHR”或“Doc”查看拦截到的请求。如图3所示。

图3 智联招聘网职位搜索API接口
点击“Preview”,观察响应数据,如图4所示。可以看出响应数据为json格式。

2.爬虫编写
Cookies的获取是智联招聘网爬虫中最核心的内容。Cookies在不同浏览器下数据格式是不同的,IE浏览器的Cookies是一个一个的txt文件,Chrome浏览器是将所有的Cookies
保存在本地SQLite数据库中。由于我们的解决方案只针对windows下的Chrome浏览器,无法兼容其他浏览器,所以把“Cookies获取”这段Python程序代码单独封装为class。
Scrapy项目创建后,在item.py同级目录下创建CookieUtils.py文件。程序实现的基本思路为查询C:\Users\用户\AppData\Local\Google\Chrome\UserData\Default\Cookies下SQLite数据库中指定domain的Cookie键和值,解密后以字典形式返回。由于调用windows API,所以需要安装第三方库pywin32。SQLite为Python标准库不需要安装。
首页路由:

详细页路由:

由于涉及反爬机制,需要cookie
CookieUtils.py

import os
import json
import base64
import sqlite3
from win32crypt import CryptUnprotectData
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
#读取local state文件的加密key
def get_string(local_state):with open(local_state, 'r', encoding='utf-8') as f:s = json.load(f)['os_crypt']['encrypted_key']return s
#导出解密密钥
def pull_the_key(base64_encrypted_key):encrypted_key_with_header = base64.b64decode(base64_encrypted_key)encrypted_key = encrypted_key_with_header[5:]key = CryptUnprotectData(encrypted_key, None, None, None, 0)[1]return key
#aes解密
def decrypt_string(key, data):nonce, cipherbytes = data[3:15], data[15:]aesgcm = AESGCM(key)plainbytes = aesgcm.decrypt(nonce, cipherbytes, None)plaintext = plainbytes.decode('utf-8')return plaintext
#获取cookie函数入口,参数host为域名
def get_cookie_from_chrome(host='%.zhaopin.com'):
#chrome浏览器配置文件Local State路径local_state = os.environ['LOCALAPPDATA'] + \r'\Google\Chrome\User Data\Local State'cookie_path = os.environ['LOCALAPPDATA'] + \r"\Google\Chrome\User Data\Default\Cookies" #cookie的本机路径
#sqlite数据库,cookies表查询语句,模糊匹配sql = "select host_key,name,encrypted_value " \"from cookies where host_key like '%s'" % hostwith sqlite3.connect(cookie_path) as conn: #创建数据库连接cu = conn.cursor()   #打开游标res = cu.execute(sql).fetchall() #获取所有数据cu.close() #关闭游标cookies = {}key = pull_the_key(get_string(local_state)) #读取密钥
#将解密的数据转换为字典for host_key, name, encrypted_value in res:if encrypted_value[0:3] == b'v10':cookies[name] = decrypt_string(key, encrypted_value)else:cookies[name] = CryptUnprotectData(encrypted_value)[1].decode()cookies_str = ""for item in cookies:cookies_str +="%s=%s;" %(item,cookies[item])return cookies_str# print(get_cookie_from_chrome())

json格式数据的获取:
参考详细解析


数据库展示

后续可能需要数据清洗,还没写,,,后面应该会补充

招聘网站分析-智联招聘网的爬虫设计与实现相关推荐

  1. Python网络数据爬取及分析-智联招聘

    python网络数据爬取及分析-智联招聘 一. 数据爬取 智联招聘是一家面向大型公司和快速发展的中小企业提供一站式专业人力资源的公司,可在智联招聘网站上根据不同城市.不同职位需求搜索得到相关招聘信息. ...

  2. 分析智联招聘的API接口,进行数据爬取

    分析智联招聘的API接口,进行数据爬取 一丶简介 现在的网站基本上都是前后端分离的,前端的你看到的数据,基本上都不是HTML上的和数据,都是通过后端语言来读取数据库服务器的数据然后动态的加载数据到前端 ...

  3. python爬虫招聘网站(智联)

    2021年10月7日爬取,爬虫代码不知道是否失效 文章目录 爬虫目标 具体过程 源码 爬虫目标 要求:搜索"大数据"专业,爬相关公司的招聘信息.列数不少于10列,行数不少于3000 ...

  4. python nodejs开发web_用nodejs和python实现一个爬虫来爬网站(智联招聘)的信息

    最近研究了一下网站爬虫,觉得python和nodejs都有优点,所以我决定实现一个爬虫,用python来抓取网页的源代码,用nodejs的cheerio模块来获取源代码内的数据.正好我有明年换工作的打 ...

  5. 九成企业没有招聘数字化,智联招聘、前程无忧们还能如何掘金?

    文丨智能相对论(aixdlun) 作者丨陈选滨 你所在的公司实现了招聘数字化吗? "前程无忧.智联招聘......这些我们公司都在用,应该算是你说的招聘数字化了吧."一位HR如是对 ...

  6. 杭州python爬虫招聘_python爬取招聘网站(智联,拉钩,Boss直聘)

    刚好最近有这需求,动手写了几个 就贴上代码算了 1.智联 将结果保存为python的一个数据框中 import requests from requests.exceptions import Req ...

  7. 几个招聘网站,智联的最垃圾

    严重BS智联,乱七八糟的,有失专业 转载于:https://www.cnblogs.com/deepblue/archive/2008/08/24/1275211.html

  8. 基于分布式的智联招聘数据的大屏可视化分析与预测

    项目需求分析及体系架构 1.1项目介绍 互联网成了海量信息的载体,目前是分析市场趋势.监视竞争对手或者获取销售线索的最佳场所,数据采集以及分析能力已成为驱动业务决策的关键技能.<计算机行业岗位招 ...

  9. 在线招聘进入2.0时代:前程无忧、智联招聘已经进入死局?!

    youjobit小编注:在线招聘行业,新老模式对抗已经愈发激烈.新型的招聘网站有招网来势汹汹,对前程无忧.智联招聘这些前辈,"年轻人"们已经有些失去耐心.他们断言:传统招聘网站的命 ...

最新文章

  1. python运行慢-Python运行效率慢?因为你不知道这六大窍门!
  2. c++:MFC中sqlite3的使用(附实际案例)
  3. C#通过属性名字符串获取、设置对象属性值
  4. 超过32位java_在java中存储和使用超过32位的数字!
  5. 现实中很多人买了车,都是自己开
  6. Android P通知
  7. noteexpress如何不生成校对报告
  8. HarmonyOS Sans - 华为把鸿蒙系统自带的字体开放给全社会免费商用了
  9. vb与mysql实现登录界面_VB连接SQL数据库做用户登录窗口
  10. 易大师接口自动化测试平台如何创建不同协议的接口并进行测试
  11. zzulioj.1055 兔子繁殖问题
  12. 【LeetCode】1427、字符串的左右移
  13. java代码审计_Java代码审计入门篇
  14. 亲爱的老狼-css三角形怎么做出来
  15. 第二章 bean捆绑基础(3节)
  16. 思维启发之意外的收获(发现自己思维局限和掀开二级指针的虎皮)
  17. 带领初学者学习 SQL 数据库编程视频教程(11 个视频)
  18. 出现生产事故测试应该怎么做
  19. sass-loader报错UnhandledPromiseRejectionWarning: TypeError: resolverFactory is not a function
  20. ajax 在IE9浏览器下不发送请求的解决方法

热门文章

  1. 补丁服务器同步不上微软,无法初始化 Microsoft Exchange 信息存储服务,因为客户端和服务器计算机上的时钟不同步...
  2. html表格左右布局,css table布局大法,解决你大部分居中、多列等高、左右布局的问题...
  3. htcm7刷linux,htc one m7刷官方zip包的教程
  4. iOS Instrument使用之Core Animation(图形性能)
  5. 大学python笔记_python笔记(1) 关于我们应不应该继续学习python
  6. 漫画 | 如何让程序员顺利入坑?
  7. Neokylin7安装gedit
  8. B站 根据BV 获取av号 api
  9. 解释一下label中的写法:plt.plot(t, sig, b-, linewidth=2, label=r$\sigma(t) = \frac{1}{1 + e^{-t}}$)...
  10. 产品研发记录05:产品研发人员应当具备的特质