0开始学py爬虫(学习笔记)(Scrapy框架)(爬取职友集招聘信息)

爬取招聘信息并保存到xlsx

爬虫实现
定义数据(第一步)先知道自己要什么数据再去爬取

在这里插入图片描述

import scrapy


class JobuiItem(scrapy.Item):
    company=scrapy.Field()
    #定义公司名称的数据属性
    position = scrapy.Field()
    #定义职位名称的数据属性
    address = scrapy.Field()
    #定义工作地点的数据属性
    detail = scrapy.Field()
    #定义招聘要求的数据属性
编辑爬虫(第二步)

在这里插入图片描述
新加爬虫文件
在这里插入图片描述

import scrapy
import bs4
from ..items import JobuiItem

class JobuiSpider(scrapy.Spider):
    name='jobui'
    #名字要对应setting文件里的BOT_NAME字段,不然编译报错
    allowed_domins=["https://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')
        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)
    
    def parse_job(self,response):
        bs=bs4.BeautifulSoup(response.text,'html.parser')
        company=bs.find(id="companyH1").text
        datas=bs.find_all("div",class_='c-job-list')
        for data in datas:
            item=JobuiItem()
            item['company']=company
            item['position']=data.find('h3').text
            item['address']=data.find(class_='job-desc').find('span').text
            item['detail']=data.find_all('span')[1].text
            yield item

代码该位置需要根据实际网页情况获取数据
yield 的意思相当于return 返回的意思,每次有新的item对象生成,也就是每次循环,新的数据请求回来都会返回一个新的item到引擎,也是每一行的数据的意思,callback函数是说,执行完了这个请求再执行的函数,思想可以参考前端的ajax请求,都是等待请求完成之后做的动作

配置文件的设置setting.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电脑上。

上面配置没有设置过,所以保存数据的xlsx表,保存在setting的同级文件

#取消`ITEM_PIPELINES`的注释后:

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
     'jobuitest.pipelines.JobuitestPipeline': 300,
}
文件存储编写
import openpyxl


class JobuiPipeline(object):
#定义一个JobuiPipeline类,负责处理item
    def __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']]
        #把公司名称、职位名称、工作地点和招聘要求都写成列表的形式,赋值给line
        self.ws.append(line)
        #用append函数把公司名称、职位名称、工作地点和招聘要求的数据都添加进表格
        
        return item
    
    def close_spider(self,spider):
    #close_spider是当爬虫结束运行时,这个方法就会执行
        self.wb.save('./jobui.xlsx')
        #保存文件
        self.wb.close()
        #关闭文件

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

我们需要取消DOWNLOAD_DELAY = 0这行的注释(删掉#)。DOWNLOAD_DELAY翻译成中文是下载延迟的意思,这行代码可以控制爬虫的速度。因为这个项目的爬取速度不宜过快,我们要把下载延迟的时间改成0.5秒。(在settings.py中)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用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、自动重试等,以提高爬取效率和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值