scrapy基础(附案例)

一.什么是scrapy?

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

二.组件

  • 引擎(Scrapy Engine)是整个scrapy框架的核心,负责各大组件之间的通讯,信号、数据传递等

  • 爬虫(Spider):对response对象进行数据提取,一是提取出所需url封装成request对象交给Engine以进入Scheduler,二是提取数据交给Engine,由其交给Pipeline进行保存处理

  • 调度器(Scheduler):接受由引擎传来的request请求对象并对其进行排列进入队列,在Engine需要时交还request对象

  • 下载器(Downloader):接受由Engine从Scheduler获取传来的request对象进行访问,返回访问该request对象后的response对象

  • 管道(Item Pipeline):负责对由Spider解析后传来的数据进行处理,如存储到文本,数据库

  • 下载器中间件(Downloader Middlewares):介于Engine和Downloader之间的中间件,主要功能为添加ip代理,添加cookie,添加UA,请求重试

  • 爬虫中间件(Spider Middlewares)介于Engine和Spider之间的中间件,主要功能为处理响应,请求,数据项

三.基本工作流程

在这里插入图片描述

  1. Spider对url进行封装为request对象交给Engine,由Engine交给Scheduler
  2. Scheduler接受request对象对其进行排列后入队
  3. Engine接受Scheduler返还的request对象并将其交给Downloader
  4. Downloader接收request对象并访问,最后返还response对象并交由Engine
  5. Engine将response对象交给Spider
  6. Spider对response对象进行解析,将数据中所需url步骤1,其余提取的数据交由Engine再交给Item Pipeline进行处理
  7. Item Pipline接受Item后对其进行数据处理,如存储到数据库中

四.scrapy项目实战讲解

此处以4399为例

1.创建项目存放目录,单机右键打开于终端

在这里插入图片描述

2.创建项目
scrapy startproject game

当在此终端输入以上命令回车后出现如下图所示则代表项目创建成功

在这里插入图片描述

此时的scrapy目录结构如下图所示:

在这里插入图片描述

3.创建Spider

先进入到game中:

cd game

创建爬虫:

scrapy genspider xiao 4399.com

4399.com:允许爬的域名,为对于爬虫设置的爬取范围,设置之后用于过滤要爬取的url,如果爬取的url与允许的域名不同,则被过滤掉。

创建成功:

在这里插入图片描述

4.Spider代码编写
import scrapy

class XiaoSpider(scrapy.Spider):
    name = "xiao"
    allowed_domains = ["4399.com"]
    start_urls = ["http://4399.com/"]
    
    def parse(self, response):
        lilist = response.xpath('//div[@class="middle_3 cf"]/div/div[1]/ul[@class="tm_list "]/li')
        for li in lilist:
            name = li.xpath('./a/text()').extract_first()
            img = li.xpath('./a/img/@lz_src').extract_first()
            dic = {
                'name' : name,
                'img' : img,
            }
            yield dic
5.Pipelines代码编写
class GamePipeline:
    def process_item(self, item, spider):
        with open(r'F:\PycharmProjects\ljf\Spider\scrapy\game\game_file\name.txt','a+',encoding='utf-8') as file:
            file.write(str(item)+'\n')
        return item

项目中管道默认是不打卡的,我们需要在setting.py文件中将管道打开:

ITEM_PIPELINES = {
    "game.pipelines.GamePipeline": 300,
}

当Piplines中存在多个类对数据进行处理时,字典中的value越大,优先级越低,value越小,优先级越高

6.启动Spider
scrapy crawl xiao

在启动Spider后将显示出一大堆日志信息,我们可以在setting.py文件中添加代码:

LOG_LEVEL = "ERROR"

以重新设置日志等级,此时只有大于等于ERROR级别的日志信息会进行显示

7.运行结果

ider后将显示出一大堆日志信息,我们可以在setting.py文件中添加代码:

LOG_LEVEL = "ERROR"

以重新设置日志等级,此时只有大于等于ERROR级别的日志信息会进行显示

7.运行结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值