我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息

python爬取智联招聘职位信息(单进程)

没办法,用账号登录进去,登录后的网页如下:

python爬取智联招聘职位信息(单进程)

输入职位名称点击搜索,显示如下网页:

python爬取智联招聘职位信息(单进程)

 

把这个URL:https://sou.zhaopin.com/?jl=765&kw=软件测试&kt=3   拷贝下来,退出登录,再在浏览器地址栏输入复制下来的URL

python爬取智联招聘职位信息(单进程)

 

哈哈,居然不用登录,也可以显示搜索的职位信息。好了,到这一步,目的达成。

接下来,我们来分析下页面,打开浏览器的开发者工具,选择Network,查看XHR,重新刷新一次页面,可以看到有多个异步加载信息

python爬取智联招聘职位信息(单进程)

查看每个请求的返回消息,我们可以找到其中有个请求已JSON方式返回了符合要求的总职位数以及职位链接等信息

点击Headers,查看这个请求的URL:

python爬取智联招聘职位信息(单进程)

 

 我们把Request URL复制到浏览器中打开,没错就是我们需要的信息:

python爬取智联招聘职位信息(单进程)

 

 分析这个URL:https://fe-api.zhaopin.com/c/i/sou?pageSize=60&cityId=765&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=软件测试&kt=3

我们可以知道:

1、pageSize:每页开始的值,第一页是0,第二是60,第三页是120,以此类推

2、cityId:是城市编码,直接输入城市名,也是可以的,比如:深圳

3、kw:搜索时输入的关键词,也就是职位名称

其他的字段都可以不变。

分析完了之后,我们可以开始写代码了:

我们先定义一个日志模块,保存爬虫过程中的日志:

# !usr/bin/env python3
# -*- coding:utf-8 -*- 
"""
@project = Spider_zhilian
@file = log
@author = Easton Liu
@time = 2018/10/20 21:42
@Description: 定义日志输出,同时输出到文件和控制台

"""
import logging
import os
from logging.handlers import TimedRotatingFileHandler


class Logger:
    def __init__(self, logger_name='easton'):
        self.logger = logging.getLogger(logger_name)
        logging.root.setLevel(logging.NOTSET)
        self.log_file_name = 'spider_zhilian.log'
        self.backup_count = 5
        # 日志输出级别
        self.console_output_level = 'WARNING'
        self.file_output_level = 'DEBUG'
        # 日志输出格式
        pattern='%(asctime)s - %(levelname)s - %(message)s'
        self.formatter = logging.Formatter(pattern)
        # 日志路径
        if not os.path.exists('log'):
            os.mkdir('log')
        self.log_path = os.path.join(os.getcwd(),'log')


    def get_logger(self):
        """在logger中添加日志句柄并返回,如果logger已有句柄,则直接返回"""
        if not self.logger.handlers:
            console_handler=logging.StreamHandler()
            console_handler.setFormatter(self.formatter)
            console_handler.setLevel(self.console_output_level)
            self.logger.addHandler(console_handler)

            # 每天重新创建一个日志文件,最多保留backup_count份
            file_handler = TimedRotatingFileHandler(filename=os.path.join(self.log_path, self.log_file_name),
                                                    when='D',
                                                    interval=1,
                                                    backupCount=self.backup_count,
                                                    delay=True,
                                                    encoding='utf-8'
                                                    )
            file_handler.setFormatter(self.formatter)
            file_handler.setLevel(self.file_output_level)
            self.logger.addHandler(file_handler)
        return self.logger
logger = Logger().get_logger()
log.py

相关文章:

  • 2021-08-30
  • 2022-12-23
  • 2021-05-15
  • 2021-06-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-02
  • 2021-04-17
  • 2022-12-23
  • 2021-12-05
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案