Scrapy抓取拉勾网招聘信息(一)

共计 3310 个字符,预计需要花费 9 分钟才能阅读完成。

前段时间自己做了个互联网职位分析的网站,本文将记录下整个数据获取的全部过程,之后还会有对数据进行可视化操作的介绍。该项目的所有代码均已放在github上。

环境要求

请自行安装以下环境:
* Win 7 (Scrapy在linux环境下不太稳定)
* Scrapy
* Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
* Python 2.7
* Mysql
* Chrome浏览器

思路分析

既然要抓取拉勾上所有的职位信息,那么必须要按照一定的顺序来爬取。
首先我们从搜索栏下手,试着搜索Python得到如下图:
Scrapy抓取拉勾网招聘信息(一)
搜索结果下面有筛选的选项,这个时候大致思路就出来了,按照职位关键字和城市名称排列组合穷举出所有的职位信息。

具体实现

关键字、城市名获取

思路有了之后,我们先来获取职位关键字。
拉勾网的主页就列举了所有职位关键字,我们只需要跟互联网相关的就行了,这边有个小技巧就是可以直接在网页上复制粘贴下来关键字,稍微再处理下格式就行了。
Scrapy抓取拉勾网招聘信息(一)
当然城市名也一样,我们先分别保存为keyword.txt、 cityname.txt

寻找是否有可用api

一般情况下,这种网站都会有自己的api可用的,这时候我们可以用到浏览器的开发者工具,快捷键为F12。
在python的搜索结果中点击展开全部城市,在跳转到城市名的页面后,打开开发者工具下的network选项。
Scrapy抓取拉勾网招聘信息(一)

这时随便点击一个城市,可以看到其中有个链接

Scrapy抓取拉勾网招聘信息(一)
一眼看过去大概明白了这个api的用法
https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E5%AE%89%E5%BA%86&needAddtionalResult=false
我们分析下这个url的组成,px=default这个参数看名字看不出来有什么意义,但是city参数不就是城市名吗?那职位关键字呢?仔细看上图,是通过POST方法传过去的,参数也很简单明了,kd就是关键字,pn就是页码。到了这一步,我们只需要写一个程序,将关键字和城市名排列组合一下,然后将返回结果筛选保存,这个数据获取的工作就算完成。

数据结构

在Mysql中创建一个数据库lagou,其中包括三张表
* city 城市名

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(8)       | NO   | PRI | NULL    | auto_increment |
| cityname | varchar(255) | NO   | UNI | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
  • job_category 职位关键字
+---------------------+--------------+------+-----+---------+----------------+
| Field               | Type         | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
| id                  | int(11)      | NO   | PRI | NULL    | auto_increment |
| job_name            | varchar(255) | NO   | UNI | NULL    |                |
| job_url             | varchar(255) | NO   |     | NULL    |                |
| job_category_level1 | varchar(255) | NO   |     | NULL    |                |
| job_category_level2 | varchar(255) | NO   |     | NULL    |                |
+---------------------+--------------+------+-----+---------+----------------+
  • job_info 招聘信息
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(8)       | NO   | PRI | NULL    | auto_increment |
| keyword           | varchar(255) | YES  |     | NULL    |                |
| positionName      | varchar(255) | YES  |     | NULL    |                |
| salary            | varchar(255) | YES  |     | NULL    |                |
| companySize       | varchar(255) | YES  |     | NULL    |                |
| city              | varchar(255) | YES  |     | NULL    |                |
| companyFullName   | varchar(255) | YES  |     | NULL    |                |
| jobNature         | varchar(255) | YES  |     | NULL    |                |
| workYear          | varchar(255) | YES  |     | NULL    |                |
| education         | varchar(255) | YES  |     | NULL    |                |
| positionId        | varchar(255) | YES  | UNI | NULL    |                |
| financeStage      | varchar(255) | YES  |     | NULL    |                |
| industryField     | varchar(255) | YES  |     | NULL    |                |
| approve           | varchar(255) | YES  |     | NULL    |                |
| positionAdvantage | varchar(255) | YES  |     | NULL    |                |
| companyLabelList  | varchar(255) | YES  |     | NULL    |                |
| score             | varchar(255) | YES  |     | NULL    |                |
| adWord            | varchar(255) | YES  |     | NULL    |                |
| createTime        | varchar(255) | YES  |     | NULL    |                |
| companyId         | varchar(255) | YES  |     | NULL    |                |
| companyShortName  | varchar(255) | YES  |     | NULL    |                |
| district          | varchar(255) | YES  |     | NULL    |                |
| businessZones     | varchar(255) | YES  |     | NULL    |                |
| imState           | varchar(255) | YES  |     | NULL    |                |
| lastLogin         | varchar(255) | YES  |     | NULL    |                |
| publisherId       | varchar(255) | YES  |     | NULL    |                |
| plus              | varchar(255) | YES  |     | NULL    |                |
| pcShow            | varchar(255) | YES  |     | NULL    |                |
| companyLogo       | varchar(255) | YES  |     | NULL    |                |
| appShow           | varchar(255) | YES  |     | NULL    |                |
| deliver           | varchar(255) | YES  |     | NULL    |                |
| gradeDescription  | varchar(255) | YES  |     | NULL    |                |
| formatCreateTime  | varchar(255) | YES  |     | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+

将上面保存的cityname.txt和keyword.txt导入到数据库,这样更方便我们之后的操作。

总结

这一节先写到这边,主要是介绍思路和前期的准备工作,下一节进行代码的编写。

正文完
 
root
版权声明:本站原创文章,由 root 2016-12-07发表,共计3310字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。