智联招聘上用Scrapy+selenium进行自动简历投递
所需要的python包
- 安装scrapy
- 安装selenium
- 安装 chrome driver
安装过程请参考其他资料, 这里就不在重复了. 主要一点是 chromedriver的版本同chrome的版本需要对应. 这个请参考 chromedriver官网
智联网页分析
登陆分析:
新版的智联招聘https://www.zhaopin.com/ 登陆采用手机号码发送验证码的方式进行登陆, 本文不对智联招聘进行模拟登陆, 我们仅采用手动登陆的方式进行登陆,并获取登陆后的 cookies. 模拟登陆设置机器学习等知识,太过复杂不适合我们初学者.
各个重要链接的分析
智联可以根据关键字搜索来获取你想要的招聘信息, 搜索网页一般翼 sou.zhaopin.com为主体 后面跟上各种参数.
这里我列举一个url : https://sou.zhaopin.com/?p=1&jl=538&sf=0&st=0&kw=IT&kt=3
p: 页数
sf: 起始薪水
st: 最高薪水
kw: keyword 搜索关键字
jl跟kt 应该跟用户有关,这里暂时不用理会
这个链接会获取各个招聘岗位的主体, 每个主体里又会有详细的工作岗位链接 这个工作安慰链接以 jobs.zhaopin.com 开头 比如 https://jobs.zhaopin.com/CC538140986J00242862803.htm
这里是具体的单个岗位的招聘详情, 有职位, 薪水, 公司, 招聘要求等所有详细的信息
以上两个链接是我们scrapy跟selenium重点需要处理的页面.
页面处理
单独页面的爬去 如果是一些简单的页面, 我们可以用request, bs4 等轻量型的爬虫工具来做, 但是你可以会发现一个问题 比如用request来操作:
import requests
res = requests.get(url)
print(res.text)
这里你会发现并没有任何招聘的信息, 原因是智联网页加载的时候需要执行js脚本 从而来获取招聘list的信息, 所以这里我们需要用selenium来控制网页的加载,driver.get(url)
同时要注意 加载是有时间的, 所以需要用WebDriverWait
函数来等待你需要获取的哪个元素加载完成,才能够返回. 这个是重点,或者你scrapy parse的时候 很可能获取不到信息
scrapy 代码部分讲解
创建scrapy 项目
这里我们架设你了解scrapy的常用语法以及流程
scrapy genspider zhaopin 'www.zhaopin.com'
入口代码分析:
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
"""
@version: Python3.6.1
@author: Justinli
"""
import scrapy
from .tool import parseTitle
from ..items import ZhaopinItem
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import re
import logging
import time
logger = logging.getLogger(__name__)
class MaitianSpider(scrapy.Spider):
name = "zhaopin"
def __init__(self):
self.options = Options()
self.options.add_argument("--headless")
self.options.add_argument('--no-sandbox')
self.options.add_argument(
'User-Agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"')
self.options.add_argument('Accept-Encoding="gzip, deflate, br"')
self.options.add_argument('Accept-Language="zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7"')
self.options.add_argument(
'Accept="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"')
self.options.add_argument('Host="i.zhaopin.com"')
self.options.add_argument('Referer="https://www.zhaopin.com/"')
self.options.add_argument('Upgrade-Insecure-Requests="1"')
self.options.add_argument('--no-sandbox')
self.options.add_argument("--disable-gpu")
self.options.add_argument("--window-size=1920x1080")
self.driver = webdriver.Chrome(chrome_options=self.options)
self.cookiestr = {‘这里填入你的cookies str 直接从浏览器流复制过来就可以了不用这里格式,因为下面的代码会做操作’}