目录
一、项目背景
最近学习了爬虫的一些基础知识,尝试自己去爬取招聘网站的招聘岗位信息,因此就做了这个项目。过程中参考了很多百度回来的知识,怕自己忘了,通过此项目总结记录下学习笔记,也方便后续索引。
二、项目介绍
此项目是通过scrapy做了两个爬虫,一个爬取社招,一个爬取校招,爬取了huawei招聘网站的校招跟社招的招聘岗位(JD)信息,通过管道文件进行数据处理,包括三种数据处理方式。
- 导出到excel
- 保存到mysql数据库
- 保存到mongodb数据库
三、需求分析
- 首先谷歌浏览器打开huawei校招招聘网址http://career.huawei.com/reccampportal/portal5/campus-recruitment.html,看下需要爬取的信息,随便点击一个岗位会新打开一个岗位详情页。
我需要爬取的数据主要是一级页面的岗位名称,工作地点,招聘类型,工作类型,二级页的岗位职责,岗位要求. - 在postman中测试下huawei校招招聘网址,随便搜了下页面上的岗位名称,并没有在html文件中,所以判断这些岗位信息都是通过接口获取到的
- 回到谷歌浏览器,F12打开调试,点击network,点击clear图标,清空掉所有网络请求
- 刷新页面,或者点击下一页(建议点下一页,因为刷新会重新加载整个页面,会加载太多东西),点击XHR(一般来说都在这里),点击preview,在这些文件中搜索下具体的岗位名称,发现可以找到了,就证明是通过这个请求获取到的数据,并且可以获取到数据结构
- 再点击左侧的headers,可以看到请求地址跟请求类型(get还是post),
6.再次清空请求,再点击下一页,再看下一页的这个文件的headers的url,将步骤5跟6的两个url比较一下,就知道哪些参数不一样了。
我这里是通过把Beyond Compare进行比较,可以看到差异点就是curPage
- 看网站结构知道是有分应届生,实习生,留学生,海外本地的,所以通过同样的方式,点击下,看下请求,对比下url,就知道差异点了,总结出一级页面规律如下:
url1 = "http://career.huawei.com/reccampportal/services/portal/portalpub/getJob/page/10/{curPage}?curPage={" \
"curPage}&pageSize=10&{jt}&jobFamClsCode=&searchText=&deptCode=&graduateItem=&reqTime" \
"=1619578489924&orderBy=ISS_STARTDATE_DESC_AND_IS_HOT_JOB "
- 点击一个具体的岗位进入到二级页,看到二级页的网址是http://career.huawei.com/reccampportal/portal5/campus-recruitment-detail.html?jobId=142915,通过同样的方式,总结二级页面规律如下:
url2 = "http://career.huawei.com/reccampportal/services/portal/portalpub/getJobDetail?jobId={jobId}"
- 通过同样的方式,得到社招的相关url信息。
四、新建项目
我是windows系统,用pycharm来做的项目,所以新建了一个jdhunter的项目,然后在terminal中新建scrapy项目
$ scrapy startproject jdhunter # 新建scra