python爬虫十一:认识Scrapy框架

1、Scrapy介绍

1.1什么是Scrapy

scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,只需要实现少量的代码就能够快速的抓取,scrapy使用了Twisted异步网络框架,可以加快下载速度
在这里插入图片描述

1.2Scrapy工作流程

在这里插入图片描述

名称作用
Scrapy Engine(引擎)总指挥:负责数据和信号在不同模块之间的传递
scheduler(调度器)一个队列,存放引擎发过来的requests请求
Downloader(下载器)下载引擎发过来的requests请求
spider(爬虫)处理引擎发过来的response,提取数据,提取url,交给引擎
item pipeline(管道)处理引擎传过来的数据,比如存储
downloader middlewares(下载中间件)可以自定义的下载扩展,比如设置代理
spider middlewares(爬虫中间件)可以自定义requests请求和进行response过滤

2、Scrapy入门

首先要通过换源导入scrapy模块pip install scrapy -i https:pypui.douban.com/simple
第一步:创建一个scrapy项目,通过cmd或者terminal来创建scrapy startproject 项目名称
生成之后就会出现一些写好的模块,就是通过模块来操作scrapy的
在这里插入图片描述

第二步:生成一个爬虫scrapy genspider 爬虫名称 +爬取范围,创建完爬虫之后,就会在spider下生成你生成的爬虫模块,数据的操作就是在这个模块中进行
在这里插入图片描述

第三步:提取数据
通过原有模板,打印response类型找到其中支持的方法,发现支持xpath以及css等结构化数据
在这里插入图片描述

import scrapy
from scrapy.http.response.html import HtmlResponse
from scrapy.selector.unified import SelectorList

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['http://douban.com/']

    def parse(self, response):
        # print('='*100)
        # print(type(response),response)<class 'scrapy.http.response.html.HtmlResponse'>
        # print('='*100)
        result = response.xpath('//div[@class="side-links nav-anon"]/ul/li')
        # print(type(result),result)<class 'scrapy.selector.unified.SelectorList'>
        # print('='*100)
        item = {}
        for li in result:
            item['name'] = li.xpath('a/em/text()').extract_first()
            if item['name'] == None:
                item['name'] = li.xpath('a/text()').extract_first()
            # print(item)
            # return item
            yield item

通过xpath提取数据发现得到是<class 'scrapy.selector.unified.SelectorList'>类,通过导入模块发现它继承了列表中的get()方法,此时我们不需要无关数据所以要用到extract_first()得到想要的数,别再setting模块中设置显示等级必须大写LOG_LEVEL = 'WARNING’或者LOG_LEVEL = ‘ERRO’
在这里插入图片描述
第四步:保存数据
通过管道pipeline来实现打开pipelines模块,它提示了不要忘记设置setting,如图操作打开setting中的通道即可使用
在这里插入图片描述
pipelines返回了一个item这是在spider中我们创建爬虫时候返回的数据,直接打印的话只有一行数据,内部封装的方法优化中表明只能用生成器返回即yield,并且只能在循环里面返回如图,返回完成之后,运行就可以执行pipelines里面对数据的具体要求方法了
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值