目录

基于Spider的全站数据抓取

五大核心组件:

请求传参

图片数据爬取之ImagesPipeline:


基于Spider的全站数据抓取

- 就是将网站中某板块下的全部页码对应的页面数据进行抓取

- 需求:爬取 https://pic.netbian.com/4kmeinv/的照片的名称

- 实现方式: - 将所有页面的url添加到start_urls列表(不推荐)

- 自行手动进行请求发送(推荐)

- 手动请求发送:

- yield scrapy.Request(url,callback)

#爬虫文件中
import scrapyclass GirlSpider(scrapy.Spider):name = 'girl'#allowed_domains = ['www.xxx.com']start_urls = ['https://pic.netbian.com/4kmeinv/']#生成一个通用的url模板(不可变)url='https://pic.netbian.com/4kmeinv/index_%d.html'page_num=2def parse(self, response):li_list=response.xpath('//ul[@class="clearfix"]/li')for li in li_list:name=li.xpath('./a/b/text()').extract_first()if self.page_num<=11: #分页操作new_url = format(self.url%self.page_num)#手动请求发送:callback回调函数是专门用作于数据解析self.page_num+=1yield scrapy.Request(url=new_url,callback=self.parse)

五大核心组件:

引擎(Scrapy) :用来处理整个系统的数据流处理, 触发事务(框架核心)

调度器(Scheduler) :用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回.

下载器(Downloader) :用于下载网页内容, 并将网页内容返回给蜘蛛

爬虫(Spiders): 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体               (Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

项目管道(Pipeline) :负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的     有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次      序处理数据。

1.spider中的url被封装成请求对象交给引擎(每一个对应一个请求对象)

2.引擎拿到请求对象之后,将全部交给调度器

3.调度器闹到所有请求对象后,通过内部的过滤器过滤掉重复的url,最后将去重后的所有url对应的请求对象压入到队列中,随后调度器调度出其中一个请求对象,并将其交给引擎

4.引擎将调度器调度出的请求对象交给下载器

5.下载器拿到该请求对象去互联网中下载数据

6.数据下载成功后会被封装到response中,随后response会被交给下载器

7.下载器将response交给引擎

8.引擎将response交给spiders

9.spiders拿到response后调用回调方法进行数据解析,解析成功后生成item,随后spiders将item交给引擎

10引擎将item交给管道,管道拿到item后进行数据的持久化存储

请求传参

(需要将在不同解析方法中解析到的数据封装到同一个iterm当中)

- 使用场景:如果爬取解析的数据不在同一张页面中。(深度爬取)

例如:比如说我们请求到一个页面https://pic.netbian.com/4kmeinv/可以拿到这些图片的详情页的网址,但是还想对它的详情页里面的数据进行抓取。即爬去解析的数据在不同页面中。

需求: 在第一个页面获取每张图的详情地址 ,然后进入详情页获取图片介绍。

#爬虫文件的代码
import scrapy
from sgirl.items import SgirlItemclass GirlSpider(scrapy.Spider):name = 'girl'#allowed_domains = ['www.xxx.com']start_urls = ['https://pic.netbian.com/4kmeinv/']url = 'https://pic.netbian.com/4kmeinv/index_%d.html'page_num = 1
#详情页面解析def parse_detail(self,response):item=response.meta['item']name=response.xpath('//*[@id="main"]/div[2]/div[1]/div[1]/h1/text()').extract_first()item['name']=nameyield item
#首页数据解析def parse(self, response):li_list = response.xpath('//*[@id="main"]/div[3]/ul/li')for li in li_list:item = SgirlItem()href = li.xpath('./a/@href').extract_first()href='https://pic.netbian.com'+href# print(href)item['href'] = href# 对详情页发送请求获取详情页的页面源码数据# 手动请求的发送# 请求传参:meta={} 可以将meta字典传递给请求对应的回调函数yield scrapy.Request(href, callback=self.parse_detail, meta={'item': item})# # 分页操作if self.page_num < 3:new_url = format(self.url % self.page_num)self.page_num += 1yield scrapy.Request(new_url, callback=self.parse)
#pipelines.py
class SgirlPipeline:def process_item(self, item, spider):print(item)return item#items.py
import scrapyclass SgirlItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()href = scrapy.Field()name = scrapy.Field()

图片数据爬取之ImagesPipeline:

- 基于scrapy爬取字符串类型的数据和爬取图片类型的数据区别?

- 字符串:只需要基于xpath进行解析且提交管道进行持久化存储

- 图片:xpath解析出图片src的属性值。单独的对图片地址发起请求获取图片二进制类型                                的数据

- ImagesPipeline: - 只需要将img的src的属性值进行解析,提交到管道,管道就会对图片的                 src进行请求发送获取图片的二进制类型的数据,且还会帮我们进行持久化存储。

- 需求:爬取站长素材中的高清图片

- 使用流程:

- 数据解析(图片的地址)

- 将存储图片地址的item提交到制定的管道类

- 在管道文件中自定制一个基于ImagesPipeLine的一个管道类:

- get_media_request          - file_path     - item_completed

- 在配置文件中:  -指定图片存储的目录:IMAGES_STORE = './imgs'

- 指定开启的管道:自定制的管道类

import scrapy
from imgsPro.items import ImgsproItemclass ImgsSpider(scrapy.Spider):name = 'imgs'#allowed_domains = ['www.xxx.com']start_urls = ['https://sc.chinaz.com/tupian/']def parse(self, response):div_list=response.xpath('//*[@id="container"]/div')for div in div_list:#注意图片伪属性src=div.xpath('./div/a/img/@src2').extract_first()src='https:'+src[0:-6]+'.jpg'item=ImgsproItem()item['src']=srcyield  item# print(src)#pipelines.py
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapter# class ImgsproPipeline:
#     def process_item(self, item, spider):
#         return item
from scrapy.pipelines.images import ImagesPipeline
import scrapy
class imgsPileLine(ImagesPipeline):#就是可以根据图片地址进行图片数据的请求def get_media_requests(self, item, info):yield scrapy.Request(item['src'])#指定图片存储的路径def file_path(self, request, response=None, info=None):imgName = request.url.split('/')[-1]return imgNamedef item_completed(self, results, item, info):return item #返回给下一个即将被执行的管道类#items.py
import scrapy
class ImgsproItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()src = scrapy.Field()

注意图片懒加载全部换成src2   

运行成功:

scrapy框架初识02相关推荐

  1. scrapy框架初识1

    目录 scrapy框架介绍: scrapy框架的基本使用: scrapy数据解析操作: ​scrapy持久化存储: 将爬取到的数据一份存储到本地一份存储到数据库,如何实现? scrapy框架介绍: 框 ...

  2. day26-爬虫-scrapy框架初识

    1.框架了解:高性能的异步下载.解析.持久化存储 2.下载安装,创建项目----------- pip install wheel Twisted 5步安装! 二.安装Linux:pip3 insta ...

  3. Python可视化数据分析02、Scrapy框架-强化测试Scrapy-CSS

    Python可视化数据分析02.Scrapy框架

  4. 初识 scrapy 框架 - 安装

    前面豆子学习了基本的urllib的模块,通过这个模块可以写一些简单的爬虫文件.如果要处理大中型的爬虫项目,urllib就显得比较low了,这个时候可以使用scrapy框架来实现,很多基本的处理在scr ...

  5. 02数据存入数据库-视频网站-实践-scrapy框架-python

    文章目录 1 构建Item 1.1 创建Item 1.2 获取目标内容 1.3 解析数据接口 1.4 封装Item 2 存储 2.1 mysql 2.2 pipelines 3 测试 4 后记 1 构 ...

  6. Python爬虫之Scrapy框架系列(1)——初识Scrapy框架【安装+简介+运行流程+组件介绍】

    目录: 1.Scrapy模块安装 2.Scrapy框架简介 2.1 Scrapy是个啥? 2.2 我们为啥要用这玩意呢? 3.运行流程 3.1 引入: 3.2 进入正题: 3.3 数据流: 3.4 中 ...

  7. 【python爬虫02】使用Scrapy框架爬取拉勾网招聘信息

    使用Scrapy框架爬取拉勾网招聘信息 最近接触了Scrapy爬虫框架,简单写了个爬虫爬取拉钩网的招聘信息,加深对Scrapy框架的理解,不得不说Scrapy框架其实还是蛮方便的,就像爬虫流水线一样, ...

  8. Python scrapy框架(01):scrapy介绍 初识scrapy

    前言: 最近在整理资料,顺便把部分干货写出来供学习以交流 一.scrapy的介绍 (1)何为框架?如何学习框架 框架就是一个集成了很多功能的一个通用性比较高的模板: 学习框架就学习框架中封装好的各种功 ...

  9. python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...

    原博文 2017-07-17 16:39 − 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pytho ...

最新文章

  1. 领域驱动设计(DDD)架构演进和DDD的几种典型架构介绍(图文详解)
  2. 图标尺寸规范_作为刚入门的UI设计师,你需要懂哪些设计规范?
  3. Update operation on extension field created by AET
  4. 【转】DCMTK各模块说明!!!!!!!
  5. java实验6 词频统计_java实训一——词频统计
  6. python和lisp学哪个好_五位专家跟你讲讲为啥Python更适合做AI/机器学习
  7. winform 防止多開
  8. (转)Managed DirectX +C# 开发(入门篇)(七)
  9. 同一个交换机组建局域网
  10. Stolz定理 【补充知识】Stolz(斯托尔茨)定理(详解➕例题)
  11. 反弹shell的各种姿势
  12. chrome+链接android手机,为什么android手机限制chrome浏览器数据连接还可以上网
  13. 2016/7/4日-你若安好,便是晴天.
  14. Linux常用命令——rlogin命令
  15. 利用FFT 及 IFFT实现傅立叶正反变换
  16. pthread实现快速排序
  17. 六种查看卫星历史影像数据方法,别怪我没跟你说
  18. 基于vue+elementui+admin的axios封装
  19. win7 php搭建博客,win7下wordPress本地搭建博客详解(深度亲测整理—傻瓜式详细教程) | 学步园...
  20. 前端基础(5):Validate

热门文章

  1. 我的世界mod开发(3番外)自定义方块/物品模型
  2. 【HarmonyOS应用开】实现天气预报
  3. 使用 ESP-Prog _ Jlink 进行 JTAG 调试时的常见错误及解决办法
  4. dubbo3消费端bean字段名称引发的问题-dubbo2.7升级到dubbo3系列
  5. linux系统给用户添加操作某个目录的权限
  6. 总结出三种评价目的便于管理干部评价
  7. 经典力学学习(运动学)——质点运动学
  8. 浅谈语音技术(ASR/TTS/质检/声纹)
  9. java -自动排课(遗传算法)包含全部源码以及数据库.
  10. chrome内存泄露(一)、内存泄漏分析工具