Scrapy-redis爬取51Job数据
一、工具
- python3
- scrapy-redis
- redis
二、准备工作
(一)安装各个模块
项目中使用到工具主要是Python3和Redis,且需要安装相应的python模块,即scrapy、scrapy_redis、redis等。
具体安装流程可以百度一下。
(二)页面分析
1、关键字页面
51job有一个页面https://jobs.51job.com/
,其中有全部招聘职位关键字的搜索结果页链接,因此,只要获取该页面中所有招聘职位的链接,再逐一使用scrapy进行爬取即可。
该项具体获取方式比较简单,提取出数据存为列表即可。
2、搜索结果页
在搜索结果页中,有每一项招聘信息的职位名、公司名、地址、薪资、学历要求、经验要求、公司性质、公司规模、职位描述,这些信息在详情页中也有,但在这一页中结构更加清晰。
3、职位详情页
除去搜索结果页获取的数据之外,该页可以获取职位标签与行业两项信息。
Scrapy配置
- 新建项目,在控制台中cd到对应的目录下后输入:
scrapy startproject 项目名
- 新建爬虫,进入爬虫目录后输入
scrapy genspider 爬虫名 "目标网站"
- setting设置
#默认配置
BOT_NAME = 'JobSpider_51'
SPIDER_MODULES = ['JobSpider_51.spiders']
NEWSPIDER_MODULE = 'JobSpider_51.spiders'
"""
Scrapy_Redis配置信息
"""
#指定scrapy-redis的调度器
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
#指定使用scrapy-redis进行去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 指定排序爬取地址时使用的队列,
# 默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.FifoQueue'
# 在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues
SCHEDULER_PERSIST = True
"""
注意:上面四项配置后,可能导致无法使用scrapy shell,具体原因没有深究, 大致为scrapy-redis和scrapy的版本存在不兼容问题
"""
# Redis数据库配置
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
#配置pipelines,值越小优先级越高
ITEM_PIPELINES = {
'JobSpider_51.pipelines.Jobspider51Pipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 299,
}
三、主程序
(一)spider
import re
import time
import json
import scrapy
import logging
from scrapy_redis.spiders import