python3 爬虫_基于Scrapy框架的Python3就业信息Jobspiders爬虫智联招聘拉勾网

基于Scrapy框架的Python3就业信息Jobspiders爬虫

  • Items.py : 定义爬取的数据
  • pipelines.py : 管道文件,异步存储爬取的数据
  • spiders文件夹 : 爬虫程序
  • settings.py : Srapy设定,请参考 官方文档
  • scrapy spider
  • 爬取三大知名网站,使用三种技术手段
  • 第一种直接从网页中获取数据,采用的是scrapy的基础爬虫模块,爬的是51job
  • 第二种采用扒接口,从接口中获取数据,爬的是智联招聘
  • 第三种采用的是整站的爬取,爬的是拉钩网
  • 获取想要的数据并将数据存入mysql数据库中,方便以后的就业趋势分析

完整项目源码下载地址:文章末尾。

实现功能:

  • 从三大知名网站上爬取就业信息,爬取发布工作的日期,薪资,城市,岗位有那些福利,要求,分类等等,并将爬到的数据存到mysql数据库中。

使用教程:

运行前需要安装的环境

  • Python3 Ubantu16.04自带,sudo apt-get install python3.5
  • mysql : sudo apt-get install mysql-server
  • 安装虚拟环境和虚拟环境的wrapper
sudo apt-get install python-pip python-dev build-essentialsudo pip install --upgrade pipsudo pip install --upgrade virtualenvsudo pip install virtualenvwrapper
  • 配置virtualenvwrapper的工作空间
  • cd ~
  • mkdir .virtualenvs
  • sudo find / -name virtualenvwrapper.sh
  • vim ~/.zshrc 注意vim自己当前所用的shell,$SHELL查看,用的是bash就vim ~/.bashrc,末行加上
export WORKON_HOME=$HOME/.virtualenvssource /usr/local/bin/virtualenvwrapper.sh
  • 注意替换自己find到的virtualenvwrapper.sh位置
  • 其次就是安装一些模块,提供三种
  1. 最简单的方法 pip install -r requirements.txt
  2. 第2种方式如果安装了virtualenv和virtualenvwrapper就直接运行以下命令安装
mkvirtualenv --python=/usr/bin/python3 py3scrapyworkon py3scrapy安装好scrapy框架: pip install scrapy - 安装时遇到一个错误twisted/test/raiser.c:4:20: fatal error: Python.h: No such file or directory,解决办法:先安装 **python-dev,python3-dev**,再安装 - 可以使用豆瓣源加速安装 pip install -i https://pypi.douban.com/simple scrapy pip install fake-useragent sudo apt-get install libmysqlclient-dev pip install mysqlclient -i https://pypi.douban.com/simple 其余的在pycharm中alt enter安装
  1. 如果没有安装虚拟环境可以在pycharm中进行安装,alt+enter选择,如果没有正确的模块,就在setting中的project中的解释器Interpreter,再点击+号在里面搜索
  2. 2019-3-10更新 发现一个问题环境问题,就是现在的Scrapy版本最新的1.6的,但是一点六的移除了一些组件导致安装的时候会报一个 "ImportError: No module named 'scrapy.contrib' ",所以自己去github上搜索scrapy通过源码编译安装1.5.1

运行项目

  • git clone https://github.com/wqh0109663/JobSpiders.git
  • 把下好的项目在pycharm中打开
  • 新建一个数据库叫jobspider,编码用utf-8 ,运行jobspider.sql文件
  • create database jobspider charset utf8;
  • use jobspider;
  • source sql路径;
  • 运行main文件,打开注释内容,运行需要的spider即可,运行拉勾网的时候要改动谷歌浏览器的驱动chromedriver位置
  • 或者直接在命令行中运行scrapy runspider XX某某spider
  • 使用拉钩网模块的时候注意改成自己的拉钩网账号(我的已经改密码了,老是提示我的异地登陆),还有就是更改chromedriver的位置

分析步骤

首先www.zhaopin.com是智联招聘网站的首页,进行搜索后,比如搜Java,点右键查看网页源代码可以看到,网页里面搜到的内容是异步加载的如图所示:

c537e3fdaf1cce8327e451bb46404e8f.png

然后点击f12打开开发者工具,如图:

8b6161803d317c035eab338182bc10fe.png

再点击刷新查看发送的异步请求,并进行分析:

8f8e503d57dde984370ea29834689959.png

可以看到发送了两个异步请求,发现第二个是个后端接口,直接拿到postman中进行测试 ,如图:

2775ae35f58fb8f646307b675d207ade.png

发现是标准的接口,直接调用接口即可爬取到网站的数据,也就避免了对网页进行分析,返回的是json数据 ,还有需要注意的地方是pageSize请求的是60但是返回的却是62:

d7a82e0ec30b12c0d73270ca0fe26f28.png
497982240b278082c27054aa6d45009b.png

然后查看网页中填充的数据条目是62条。其他的就比较简单了,直接根据url拼接发送请求,对每一个item进行解析即可,其中还需要进行url编码。

下载地址:https://github.com/wqh0109663/JobSpiders/archive/master.zip

基于Python Scrapy实现的拉勾全站职位数据采集 爬虫系统 含数据库处理 # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy,re from scrapy.loader import ItemLoader from scrapy.loader.processors import MapCompose, TakeFirst from w3lib.html import remove_tags def extract_num(text): #从字符串中提取出数字 match_re = re.match(".*?(\d+).*", text) if match_re: nums = int(match_re.group(1)) else: nums = 0 return nums def replace_splash(value): '''去除/''' return value.replace("/", "") def handle_strip(value): '''空格''' return value.strip() def handle_jobaddr(value): '''去查看地图''' addr_list = value.split("\n") addr_list = [item.strip() for item in addr_list if item.strip() != "查看地图"] return "".join(addr_list) class LagouJobItemLoader(ItemLoader): #自定义itemloader default_output_processor = TakeFirst() class LagouJobItem(scrapy.Item): #拉勾职位 title = scrapy.Field() url = scrapy.Field() salary = scrapy.Field() job_city = scrapy.Field( input_processor=MapCompose(replace_splash), ) work_years = scrapy.Field( input_processor=MapCompose(replace_splash), ) degree_need = scrapy.Field( input_processor=MapCompose(replace_splash), ) job_type = scrapy.Field() publish_time = scrapy.Field() job_advantage = scrapy.Field() job_desc = scrapy.Field( input_processor=MapCompose(handle_strip), ) job_addr = scrapy.Field( input_processor=MapCompose(remove_tags, handle_jobaddr), ) company_name = scrapy.Field( input_processor=MapCompose(handle_strip), ) company_url = scrapy.Field() crawl_time = scrapy.Field() crawl_update_time = scrapy.Field() def get_insert_sql(self): insert_sql = """ insert into lagou_job(title, url, salary, job_city, work_years, degree_need, job_type, publish_time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值