博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
年底啦,利用Python爬取Boss直聘的招聘信息,为明年跳槽做准备
阅读量:7197 次
发布时间:2019-06-29

本文共 2184 字,大约阅读时间需要 7 分钟。

前言

为什么都说程序员的薪资高,但是刚开始入职的你,薪资并不是自己想象中的那样,首先是你的工作经验不足,其次就是需要不断的去学习,然后去跳槽,增加自己资历,曾经有一个大佬说过,如果你想要自己的薪资很好看,首先必须先进大厂,哪怕是个打杂的,之后跳槽的时候别人也知道你是从大厂出来的,相对而言薪资会高一些

环境安装

爬虫框架我们使用Scrapy,爬取到的数据我们使用mongodb来存储

1、安装Scrapy

pip install Scrapy复制代码

2、安装mongodb

pip install pymongo 复制代码

Scrapy框架使用步骤

创建工程步骤:

1、创建工程 scrapy startproject BOSS

2、创建爬虫程序 cd BOSS 回车 scrapy gensipder zhipin zhipin.com

3、编写数据存储模板items.py 类对象继承自scrapy.item

4、编写爬虫zhipin.py 类对象集成子scrapy.Spider

5、修改settings.py配置文件 ITEM_PIPELINES = {'BOSS.pipelines.WwwZhipinComPipeline':100}

6、编写数据处理脚本进行数据保存,pipelines.py 类对象继承自object

def process_item(self, item, spider): with open("my_boss.txt", 'a') as fp: fp.write(item['name'] + '')复制代码

7、执行爬虫 cd BOSS 回车 scrapy crawl zhipin --nolog

注意:如果导出的中文信息乱码则需要在settings.py文件中配置编码:FEED_EXPORT_ENCODING = 'utf-8'

mongodb使用

后续我们爬取到的招聘信息就存储在该数据库中,为了方便数据存储,我们这里封装了一个类,来快速的访问数据库,代码如下所示

上述代码中我们封装了一个名为my_connect的类,并提供了输入、更新、删除和查找文档的接口,除此之外还提供了一个setTableName的接口,这个接口主要是用于往不同集合中插入文档数据。MongoDB 概念解析可以看这里。mongodb属于非关系型数据库,与关系型数据库对比图如下

my_connect初始化函数中有一个参数,需要我们传入ip地址、端口号、数据库名字和集合名字,使用方式如下所示

创建爬虫zhipin

1、输入如下命令,创建zhipin爬虫

scrapy startproject www_zhipin_comcd www_zhipin_com 回车 scrapy gensipder zhipin www.zhipin.com复制代码

2、修改zhipin.py,爬取数据,类中成员属性含义代码中都有解释,这里不做解释,需要注意的是parse方法,该方法是爬取到数据以后的回调函数,参数response表示爬取到的结果,我们可以对其进行解析拿到网页数据。

解析数据时,默认一次可以拿到30条数据,我们循环遍历这30条数据,构造WwwZhipinComItem对象item,然后调用yield item即可

2.1、这里有一个小技巧,我们重写start_requests方法,让他调用了我们自己写的一个方法next_request,并设置了回调函数为parse方法,当parse数据解析完毕后,又构造一个新的url在次调用next_request方法拉取数据,一直循环迭代,拉取数据、解析数据

2.2、boss直聘有一个限制,不管以什么样的方式搜索数据,数据最多显示10页,这也就要求我们需要对爬虫做一个处理,在合适的实际去终止拉取数据,否则爬虫会一直运行下去,直到boss直聘返回异常(请求被限制)

2.3、经过对爬虫数据的分析,我们发现当最后一次请求和上一次请求的数据完全一样时,我们可能已经到达请求的最后一页,那么这个时候我们就可以去终止爬虫了

2.4、为了快速的比对我么爬取到的数据是否和上一次一样,我们对爬取到的数据进行简单的处理,每次去对比关键字段即可

itemData包含是一条招聘信息,存储了招聘公司名称,职位名称,发布时间和发布城市,我们重写了__eq__方法,就是为了比对两个对象是否相等。

2.5、一次请求的数据是一个itemData集合,当两个集合相等时我们即可终止爬虫

2.6、parse解析数据时,对每一条数据会构造一个WwwZhipinComItem对象item,并通过yield item方式触发

3、对于爬取的字段定义需要我们修改item.py文件,定义爬取字段如下

4、最后一步写入数据库

4.1、第四节我们封装了一个名字为my_connect的数据库操作对象,在这里我们就可以用上了。

4.2、首先构造一个conn对象

4.3、指定要插入的集合,然后构造数据、插入数据

4.4、数据爬取结束后,使用gui工具Navicat 12 for MongoDB可以查看爬取到的数据,效果如下图所示

转载于:https://juejin.im/post/5bfe8fc86fb9a049c042bb48

你可能感兴趣的文章
Linux之NTP时间服务器配置部署
查看>>
我的友情链接
查看>>
python 安装mssql扩展
查看>>
js实现点击copy,可兼容
查看>>
oracle安装笔记 win
查看>>
我的友情链接
查看>>
新建文章 1
查看>>
Web应用添加Struts 2 的支持(SSH框架研究)
查看>>
CrowdStrike:我们是如何发现Win64bit提权0day漏洞(CVE-2014-4113)
查看>>
众云推一站式营销让企业移动营销先人一步
查看>>
过度营销 微信未来将低于腾讯预期
查看>>
在PHP语言中使用JSON
查看>>
GrideView 网格控件
查看>>
系统管理员-Linux基础学习-第一部分内容。
查看>>
Django 入门学习(3)
查看>>
Powershell + Nagios 监控 VEEAM 备份状态
查看>>
布雷(扫雷游戏)
查看>>
收集整理了一些免费的区块链、以太坊技术开发相关的文件,有需要的拿去
查看>>
SKYPE原理分析
查看>>
Add Digits(leetcode258)
查看>>