项目目标:用Scrapy爬取招聘网站的招聘信息

目标网站:职友集,url:https://www.jobui.com/rank/company/
先爬取企业排行榜四个榜单里的公司,再接着爬取这些公司的招聘信息,爬取公司名称、职位、工作地点和招聘要求。

一、创建项目

电脑终端跳转到你想要保存项目的目录下输入创建Scrapy项目的命令:
scrapy startproject jobui(jobui为项目名字可自取)start- [stɑːt]–开始 project-[ˈprɔdʒekt] —n,计划,设计,项目
创建好项目后,本地电脑的编译器打开这个Scrapy项目,会看到如下的结构:

二、定义item(要爬取的数据)

在items.py这个文件里定义,就是定义要爬取的公司名称、职位、工作地点和招聘要求,的数据.代码示例:

import scrapy
class JobuiItem(scrapy.Item):
#定义了一个继承自scrapy.Item的JobuiItem类company = scrapy.Field()#定义公司名称的数据属性position = scrapy.Field()#定义职位名称的数据属性address = scrapy.Field()#定义工作地点的数据属性detail = scrapy.Field()#定义招聘要求的数据属性

三、创建和编写爬虫文件

在spiders文件夹里创建爬虫文件,命名为jobui_ jobs

公司的网址规律是:
http://www.jobui.com+/company/+数字/+jobs/
比如,字节跳动公司的招聘信息网址就是:
https://www.jobui.com/company/10375749/jobs/
再把每家公司招聘信息的网址封装成requests对象,在Scrapy里,获取网页源代码会由引擎分配交给下载器去做,不需要我们自己处理(也就是不需要requests.get())。我们之所以要构造新的requests对象,是为了告诉引擎,我们新的请求需要传入什么参数,这样才能让引擎拿到的是正确requests对象,交给下载器处理。

代码示例:

#导入模块
import scrapy
import bs4
from ..items import JobuiItemclass JobuiSpider(scrapy.Spider):
#定义一个爬虫类JobuiSpidername = 'jobui'                  #定义爬虫的名字为jobuiallowed_domains = ['www.jobui.com']#定义允许爬虫爬取网址的域名——职友集网站的域名start_urls = ['https://www.jobui.com/rank/company/']#定义起始网址——职友集企业排行榜的网址def parse(self, response):#parse是默认处理response的方法bs = bs4.BeautifulSoup(response.text, 'html.parser')#用BeautifulSoup解析response(企业排行榜的网页源代码)ul_list = bs.find_all('ul',class_="textList flsty cfix")#用find_all提取<ul class_="textList flsty cfix">标签for ul in ul_list:#遍历ul_lista_list = ul.find_all('a')#用find_all提取出<ul class_="textList flsty cfix">元素里的所有<a>元素for a in a_list:#再遍历a_listcompany_id = a['href']#提取出所有<a>元素的href属性的值,也就是公司id标识url = 'https://www.jobui.com{id}jobs'real_url = url.format(id=company_id)#构造出公司招聘信息的网址链接
上面已经完成了核心代码逻辑的前两件事:提取企业排行榜的公司id标识和构造公司招聘信息的网址,接着就是构造新的requests对象和定义新的方法处理response。       yield scrapy.Request(real_url, callback=self.parse_job)
#用yield语句把构造好的request对象传递给引擎。用scrapy.Request构造request对象。callback参数设置调用parsejob方法。 scrapy.Request是构造requests对象的类。real_url是我们往requests对象里传入的每家公司招聘信息网址的参数。callback的中文意思是回调。self.parse_job是我们新定义的parse_job方法(在下面定义的)。往requests对象里传入callback=self.parse_job这个参数后,引擎就能知道response要前往的下一站,是parse_job()方法。yield语句就是用来把这个构造好的requests对象传递给引擎。def parse_job(self, response):#定义新的处理response的方法parse_job(方法的名字可以自己起)bs = bs4.BeautifulSoup(response.text, 'html.parser')#用BeautifulSoup解析response(公司招聘信息的网页源代码)company = bs.find(id="companyH1").text#用find方法提取出公司名称datas = bs.find_all('div',class_="c-job-list")#用find_all提取<div class_="c-job-list">标签,里面含有招聘信息的数据for data in datas:#遍历datasitem = JobuiItem()#实例化JobuiItem这个类item['company'] = company#把公司名称放回JobuiItem类的company属性里item['position']=data.find('a').find('h3').text#提取出职位名称,并把这个数据放回JobuiItem类的position属性里item['address'] = data.find_all('span')[0]['title']#提取出工作地点,并把这个数据放回JobuiItem类的address属性里item['detail'] = data.find_all('span')[1]['title']#提取出招聘要求,并把这个数据放回JobuiItem类的detail属性里yield item#用yield语句把item传递给引擎

四、存储文件

在Scrapy里,把数据存储成csv文件和Excel文件,也有分别对应的方法

存储成csv文件的方法只需在settings.py文件里,添加如下的代码即可。

FEED_URI='./storage/data/%(name)s.csv'
FEED_FORMAT='csv'
FEED_EXPORT_ENCODING='ansi'

1、FEED_URI是导出文件的路径。’./storage/data/%(name)s.csv’,就是把存储的文件放到与items.py文件同级的storage文件夹的data子文件夹里。
2、FEED_FORMAT 是导出数据格式,写csv就能得到csv格式。
3、FEED_EXPORT_ENCODING 是导出文件编码,ansi是一种在windows上的编码格式,也可以把它变成utf-8用在mac电脑上。

存储成Excel文件的方法

存储成Excel文件的方法需要先在settings.py里设置启用ITEM_PIPELINES,

1、设置方法如下:

#需要修改`ITEM_PIPELINES`的设置代码:# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {#     'jobui.pipelines.JobuiPipeline': 300,
# }

只要取消ITEM_PIPELINES的注释(删掉#)即可,取消后如下:

#取消`ITEM_PIPELINES`的注释后:# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'jobui.pipelines.JobuiPipeline': 300,
}

2、接着,就可以去编辑pipelines.py文件。存储为Excel文件,我们依旧是用openpyxl模块来实现,代码如下:

import openpyxlclass JobuiPipeline(object):
#定义一个JobuiPipeline类,负责处理itemdef __init__(self):#初始化函数 当类实例化时这个方法会自启动self.wb =openpyxl.Workbook()#创建工作薄self.ws = self.wb.active#定位活动表self.ws.append(['公司', '职位', '地址', '招聘信息'])#用append函数往表格添加表头def process_item(self, item, spider):#process_item是默认的处理item的方法,就像parse是默认处理response的方法line = [item['company'], item['position'], item['address'], item['detail']]#把公司名称、职位名称、工作地点和招聘要求都写成列表的形式,赋值给lineself.ws.append(line)#用append函数把公司名称、职位名称、工作地点和招聘要求的数据都添加进表格return item#将item丢回给引擎,如果后面还有这个item需要经过的itempipeline,引擎会自己调度def close_spider(self, spider):#close_spider是当爬虫结束运行时,这个方法就会执行self.wb.save('./jobui.xlsx')#保存文件self.wb.close()#关闭文件

4、最后,我们还要再修改Scrapy中settings.py文件里的默认设置,添加请求头,以及把ROBOTSTXT_OBEY=True改成ROBOTSTXT_OBEY=False

#需要修改的默认设置:# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'jobui (+http://www.yourdomain.com)'# Obey robots.txt rules
ROBOTSTXT_OBEY = True

5、还有一处默认设置我们需要修改,代码如下:

# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 0  #取消DOWNLOAD_DELAY = 0这行的注释(删掉#)。
#DOWNLOAD_DELAY翻译成中文是下载延迟的意思,这行代码可以控制爬虫的速度。因为这个项目的爬取速度不宜过快,我们要把下载延迟的时间改成0.5秒。即:DOWNLOAD_DELAY = 0.5

五、运行代码

想要运行Scrapy有两种方法

一、种是在本地电脑的终端跳转到scrapy项目的文件夹

(跳转方法:cd+文件夹的路径名如:
cd D:\python\Pythoncode\douban\douban)
然后输入命令行:scrapy crawl douban(douban 就是我们爬虫的名字)。)

二、需要我们在最外层的大文件夹里新建一个main.py文件(与scrapy.cfg同级)。

然后在这个main.py文件里,输入以下代码,点击运行,Scrapy的程序就会启动。

from scrapy import cmdline
#导入cmdline模块,可以实现控制终端命令行。
cmdline.execute(['scrapy','crawl',' '])
#用execute()方法,输入运行scrapy的命令。

第1行代码:在Scrapy中有一个可以控制终端命令的模块cmdline。导入了这个模块,我们就能操控终端。
第2行代码:在cmdline模块中,有一个execute方法能执行终端的命令行,不过这个方法需要传入列表的参数。我们想输入运行Scrapy的代码scrapy crawl douban,就需要写成[‘scrapy’,‘crawl’,‘douban’]这样。

本博文为学习笔记,由博主自风变编程学习整理而来。

爬虫项目实操四、用Scrapy爬取招聘网站的招聘信息相关推荐

  1. 爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息

    爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息 一.前言 二.项目目标 三.项目的环境配置 四.项目实现 1. 创建QSBK项目 2. 实现Spider 1. 实现一页网页上 ...

  2. 【爬虫】Scrapy爬取腾讯社招信息

    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...

  3. 爬虫项目——B站石原里美视频数据爬取

    爬虫项目--B站石原里美视频数据爬取 1. 爬虫原理 2. 数据爬取 2.1 库函数的引用 2.2 定义URL翻页函数 2.3 定义储存TXT文件函数 2.4 定义爬取函数 2.5 主函数 2.6 运 ...

  4. Scrapy爬取当当网的商品信息存到MySQL数据库

    Scrapy爬取当当网的商品信息存到MySQL数据库 Scrapy 是一款十分强大的爬虫框架,能够快速简单地爬取网页,存到你想要的位置.经过两天的摸索,终于搞定了一个小任务,将当当网的商品信息爬下来存 ...

  5. Crawler:爬虫之基于https+parse库实现爬取国内某知名招聘网上海、北京关于区块链职位的求职信息

    Crawler:爬虫之基于https+parse库实现爬取国内某知名招聘网上海.北京关于区块链职位的求职信息 目录 输出结果 1.上海区块链职位 2.北京区块链职位 设计思路 核心代码 输出结果 1. ...

  6. 爬虫概念与编程学习之如何爬取视频网站页面(三)

    先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二) 不多说,直接上代码. 编写代码 运行 <! ...

  7. 爬虫项目实操二、爬取“下厨房”网站的菜名、所需材料、和菜名所对应的详情页URL

    项目-爬取"下厨房"网站的菜名.所需材料.和菜名所对应的详情页URL. 它有一个固定栏目,叫做"本周最受欢迎",收集了当周最招人喜欢的菜谱.地址如下: http ...

  8. 四十一、完成scrapy爬取官方网站新房的数据

    @Author:Runsen 文章目录 前言 分析网页 新建项目 加请求头 搞定item 首页调试 详情页调试 保存json 前言 在前几天,接到一个大学生的作业的爬虫单子,要求采用scrapy爬取链 ...

  9. python用scrapy爬取58同城的租房信息

    上篇我们用了beautifulsoup4做了简易爬虫,本次我们用scrapy写爬虫58同城的租房信息,可以爬取下一页的信息直至最后一页. 1.scrapy的安装 这个安装网上教程比较多,也比较简单,就 ...

  10. 用scrapy爬取菜谱网站的食谱与ajax异步加载标签的获取

    由于最近想做一个和菜谱应用,所以需要爬虫爬到大量的食谱数据,学习了一系列爬虫相关的知识,和大家分享一下 首先我们要爬取的网站的域名为"home.meishichina.com" 在 ...

最新文章

  1. spring JdbcTemplate 在项目中的浅层(5个使用场景)封装
  2. 基于用例点来度量软件规模并管理进度 之结束语
  3. Opencv判断是否加载图片的两种方法
  4. vue_prop单向数据流
  5. target tile component.js load logic
  6. eclipse debug怎么用_利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)
  7. 滤波电容的选择(调试中)
  8. 标准粒子群优化算法 PSO
  9. 最常用常见通用字体有哪些
  10. 鸢尾花数据集的数据可视化
  11. Ubuntu下使用date显示毫秒级
  12. 基于PLC和组态软件的多方式运行小车控制系统设计
  13. i5处理器学计算机怎么设置,处理器怎么超频 酷睿i3/i5/i7系列CPU超频详细教程 (全文)...
  14. python中正则表达式的简单应用_Python正则表达式详细应用
  15. 【k8s系列001】K8s集群部署H2O
  16. 什么是计算机语言????
  17. 圣诞快到了,用JavaScript画一个圣诞树
  18. Windows系统安全检查脚本
  19. PTA-C理论B类题库6-3使用函数求最大公约数(辗转相除法的实现)
  20. JAVA中DateTime获取当前时间

热门文章

  1. 学习笔记13--基于蜂窝移动通信的车联网技术
  2. 企业微信第三方应用开发
  3. 远大驾校 考驾照 报名 科目一 科目二 科目三 科目四 视频
  4. Vue3.0快速上手-重要知识点罗列-系列二
  5. 高斯消元(解线性方程组)
  6. 未安装任何音频输出设备 解决方案
  7. 每一个小孩都是种子,请允许Ta在成长的路上跌跌撞撞。耐心的等待,种子一定能长成参天大树!
  8. labelme快捷键修改
  9. 一位前端新人的面试经验
  10. 重磅!超详细的 JS 数组方法整理出来了