scrapy项目-爬取招聘网站的招聘信息

https://www.jobui.com/rank/company/

我们先对这个网站做初步的观察,这样我们才能明确项目的爬取目标。
在这里插入图片描述
打开网址后,你会发现:这是职友集网站的地区企业排行榜,里面含有本月人气企业榜、最佳口碑雇主、最多粉丝企业榜和最多评论企业榜四个榜单。

点击【北京字节跳动科技有限公司】,会跳转到这家公司的详情页面,再点击【招聘】,就能看到这家公司正在招聘的所有岗位信息。
在这里插入图片描述
初步观察后,我们可以把爬取目标定为:先爬取企业排行榜四个榜单里的公司,再接着爬取这些公司的招聘信息。

每个榜单有10家公司,四个榜单一共就是40家公司。也就是说,我们要先从企业排行榜爬取到这40家公司,再跳转到这40家公司的招聘信息页面,爬取到公司名称、职位、工作地点和招聘要求。

创建项目

创建Scrapy项目的命令:scrapy startproject douban

创建好项目后,你在本地电脑的编译器打开这个Scrapy项目,会看到如下的结构:

在这里插入图片描述

定义item

import scrapy

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

创建和编写爬虫文件

定义好item,我们接着要做的是在spiders里创建爬虫文件,命名为jobui_ jobs。

import scrapy
import bs4
from ..items import JobuiItem

class JobuiSpider(scrapy.Spider):
    name = 'jobs'
    allowed_domains = ['www.jobui.com']
    start_urls = ['https://www.jobui.com/rank/company/']
    
#提取公司id标识和构造公司招聘信息的网址:
    def parse(self, response):
    #parse是默认处理response的方法
        bs = bs4.BeautifulSoup(response.text, 'html.parser')
        ul_list = bs.find_all('ul',class_="textList flsty cfix")
        for ul in ul_list:
            a_list = ul.find_all('a')
            for a in a_list:
                company_id = a['href']
                url = 'https://www.jobui.com{id}jobs'
                real_url = url.format(id=company_id)
                yield scrapy.Request(real_url, callback=self.parse_job)
#用yield语句把构造好的request对象传递给引擎。用scrapy.Request构造request对象。callback参数设置调用parsejob方法。

    def parse_job(self, response):
    #定义新的处理response的方法parse_job(方法的名字可以自己起)
        bs = bs4.BeautifulSoup(response.text, 'html.parser')
        #用BeautifulSoup解析response(公司招聘信息的网页源代码)
        company = bs.find(id="companyH1").text
        #用fin方法提取出公司名称
        datas = bs.find_all('li',class_="company-job-list")
        #用find_all提取<li class_="company-job-list">标签,里面含有招聘信息的数据
        for data in datas:
        #遍历datas
            item = JobuiItem()
            #实例化JobuiItem这个类
            item['company'] = company
            #把公司名称放回JobuiItem类的company属性里
            item['position']=data.find('h3').find('a').text
            #提取出职位名称,并把这个数据放回JobuiItem类的position属性里
            item['address'] = data.find('span',class_="col80").text
            #提取出工作地点,并把这个数据放回JobuiItem类的address属性里
            item['detail'] = data.find('span',class_="col150").text
            #提取出招聘要求,并把这个数据放回JobuiItem类的detail属性里
            yield item
            #用yield语句把item传递给引擎

存储文件

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

FEED_URI='./storage/data/%(name)s.csv'
FEED_FORMAT='CSV'
FEED_EXPORT_ENCODING='ansi'
  • FEED_URI是导出文件的路径。’./storage/data/%(name)s.csv’,就是把存储的文件放到与settings.py文件同级的storage文件夹的data子文件夹里。

  • FEED_FORMAT 是导出数据格式,写CSV就能得到CSV格式。

  • FEED_EXPORT_ENCODING 是导出文件编码,ansi是一种在windows上的编码格式,你也可以把它变成utf-8用在mac电脑上。

运行代码

在这里插入图片描述

以下是使用Scrapy框架爬取智联招聘网站职位信息的示例代码: 1. 创建Scrapy项目 在命令行中输入以下命令,创建一个名为`zhaopin`的Scrapy项目: ``` scrapy startproject zhaopin ``` 2. 创建爬虫文件 在项目根目录下,使用以下命令创建一个名为`zhaopin_spider`的爬虫文件: ``` scrapy genspider zhaopin_spider sou.zhaopin.com ``` 3. 修改爬虫代码 打开`zhaopin_spider.py`文件,将其修改为以下代码: ```python import scrapy class ZhaopinSpiderSpider(scrapy.Spider): name = 'zhaopin_spider' allowed_domains = ['sou.zhaopin.com'] def start_requests(self): # 设置请求URL url = 'https://sou.zhaopin.com/?jl=530&kw=Python&kt=3' # 发送请求 yield scrapy.Request(url, callback=self.parse) def parse(self, response): # 获取职位列表 job_list = response.xpath('//div[@class="joblist-box__item"]') # 遍历职位列表,获取职位信息 for job in job_list: # 获取职位名称 job_name = job.xpath('.//div[@class="joblist-box__jobname"]/text()') # 获取公司名称 company_name = job.xpath('.//div[@class="joblist-box__companyname"]/text()') # 获取工作地点 location = job.xpath('.//div[@class="joblist-box__jobarea"]/text()') # 获取薪资范围 salary = job.xpath('.//span[@class="joblist-box__salary"]/text()') # 获取职位链接 job_link = job.xpath('.//a[@class="joblist-box__jobname"]/@href') # 输出职位信息 yield { '职位名称': job_name.extract_first().strip(), '公司名称': company_name.extract_first().strip(), '工作地点': location.extract_first().strip(), '薪资范围': salary.extract_first().strip(), '职位链接': job_link.extract_first().strip() } ``` 在`start_requests`方法中,我们设置了请求URL,并使用`scrapy.Request`发送请求。在`parse`方法中,我们使用XPath表达式获取职位信息,并使用`yield`输出结果。 4. 运行爬虫 在命令行中,进入项目根目录,输入以下命令运行爬虫: ``` scrapy crawl zhaopin_spider -o result.json ``` 其中,`-o result.json`表示将结果保存到名为`result.json`的文件中。 需要注意的是,Scrapy框架会自动处理反爬虫机制,但是也需要注意一些规则,如请求频率等。另外,在爬取数据时,可以使用Scrapy提供的一些中间件,如随机User-Agent、自动重试等,以提高爬取效率和稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值