1. # settings 配置 UA
  2. USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'

一丶scrapy的图片数据爬取(流数据的爬取)

​ scrapy中封装好了一个管道类(ImagesPipeline),基于该管道类可以实现图片资源的请求和持久化存储

编码流程:

  • 爬虫文件中解析出图片的地址
  • 将图片地址封装到item中且提交给管道
  • 管道文件中自定义一个管道类(父类:ImagesPipeline)
  • 重写三个方法:
    • def get_media_requests(self,item,info):
    • def file_path(self,request,response=None,info=None):
    • def item_completed(self,result,item,info):
  • 在配置文件中开启管道且加上IMAGES_STORE = './imgLibs'

在scrapy中如何进行手动请求发送

​ yield scrapy.Request(url,callback)

在scrapy中如何进行post请求的发送?

​ yield scrapy.FormRequest(url,callback,formdata)

如何对起始的url进行post请求的发送?

  • 重写父类的start_requests(self):

    def start_requests(self):

    for url in self.start_urls:

    yield scrapy.FormRequest(url,callback=self.parse,formdata={})

在scrapy中如何提升爬取数据的效率?

  1. 增加并发:
  2. 默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100
  3. 降低日志级别:
  4. 在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:LOG_LEVEL = ERROR
  5. 禁止cookie
  6. 如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:COOKIES_ENABLED = False
  7. 禁止重试:
  8. 对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:RETRY_ENABLED = False
  9. 减少下载超时:
  10. 如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:DOWNLOAD_TIMEOUT = 1 超时时间为10s

请求传参(深度爬取)

  • 深度爬取:

    • 爬取的数据没有存在同一张页面中。
  • 如何实现请求传参
    • Request(url,callback,meta={}):可以将meta字典传递给callback
    • callback接收item:response.meta

scrapy的五大核心组件

  1. 引擎(Scrapy)
  2. 用来处理整个系统的数据流处理, 触发事务(框架核心)
  3. 调度器(Scheduler)
  4. 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  5. 下载器(Downloader)
  6. 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  7. 爬虫(Spiders)
  8. 爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  9. 项目管道(Pipeline)
  10. 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

scrapy的中间件

  • 有哪些中间件。

    • 下载中间件(推荐)
    • 爬虫中间件
  • 下载中间件的作用
    • 批量拦截所有的请求和响应
  • 为什么拦截请求
    • 篡改请求的头信息(UA)

      • request.headers['User-Agent'] = 'xxxxx'
    • 代理
  • 为什么拦截响应
    • 篡改响应数据
    • 篡改响应对象(推荐)

项目:

网易新闻(国内,国际,军事,航空,无人机)新闻数据的标题和内容

  • 分析:

    • 1.每一个板块下对应的新闻数据都是动态加载出来的
    • 2.会对五个板块的响应数据进行数据解析,但是板块对应的响应对象是不包含动态加载的新闻数据,目前

      获取的每一个板块对应的响应对象是不满足需求的响应对象!!!
    • 3.将不满足需求的5个响应对象(工程中一共会有1+5+n),修改成满足需求。
      • 找到指定的5个不满足需求的响应对象(中间件)
  • 你的redis如果不可以写入字典
    • pip install -U redis==2.10.6

python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件的更多相关文章

  1. python爬虫---js加密和混淆,scrapy框架的使用.

    python爬虫---js加密和混淆,scrapy框架的使用. 一丶js加密和js混淆 js加密 ​ 对js源码进行加密,从而保护js代码不被黑客窃取.(一般加密和解密的方法都在前端) http:// ...

  2. (转)Python爬虫--通用框架

    转自https://blog.csdn.net/m0_37903789/article/details/74935906 前言: 相信不少写过Python爬虫的小伙伴,都应该有和笔者一样的经历吧只要确 ...

  3. python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...

  4. python爬虫入门(八)Scrapy框架之CrawlSpider类

    CrawlSpider类 通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl tencent tencent.com CrawSpid ...

  5. python爬虫入门(九)Scrapy框架之数据库保存

    豆瓣电影TOP 250爬取-->>>数据保存到MongoDB 豆瓣电影TOP 250网址 要求: 1.爬取豆瓣top 250电影名字.演员列表.评分和简介 2.设置随机UserAge ...

  6. 爬虫(十四):Scrapy框架(一) 初识Scrapy、第一个案例

    1. Scrapy框架 Scrapy功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展程度非常高,它几乎可以应对所有反爬网站,是目前Python中使用最广泛的爬虫框架. 1.1 Scrapy介绍 ...

  7. python爬虫入门(3)----- scrapy

    scrapy 简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为了 页面抓取 (更确切来说, 网络 ...

  8. python爬虫入门(5)-Scrapy概述

    http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html   Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框 ...

  9. python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影

    我们在之前的文章谈到了高效爬虫 在 python 中 多线程下的 GIL 锁会让多线程显得有点鸡肋 特别是在 CPU 密集型的代码下 多线程被 GIL 锁搞得效率不高 特别是对于多核的 CPU 来说 ...

随机推荐

  1. vue使用swiper模块滑动时报错:[Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example becaus

    报错: vue报这个错 [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for ex ...

  2. 第02节-BLE协议各层的形象化理解

    本篇博客根据韦大仙视频,整理所得. 先上框图: ATT层 从ATT开始看,在上篇博客讲的医院结构里面有个检验室,检验室可以得到各项结果,但是它并不知道这些结果代表什么含义.类比的在BLE协议栈里面,A ...

  3. docker学习-qiang

    docker优势 轻量级.资源损耗少.启动快.性能高.只能运行linux系统 容器技术发展历程 1.chroot技术 新建一个子系统(拥有自己完整的系统文件) ldd /bin/ls(查看ls命令依赖 ...

  4. 【大数据】0002---MongoDB集群自动分离创建新集群

    场景:MongoDB集群运行后,自动产生新的集群 解答:可能没有理解问题,理清思路如下 1.日志分析 2.配置文件检查(日期.版本) 3.网络IP变化 4.github 5.stack overflo ...

  5. CUDA10安装配置

    https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_vers ...

  6. 第02组Alpha冲刺(4/4)

    队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...

  7. Educational Round 66 题解

    作为橙名来水了一发…… 这次题目就比上次良心多了.7题有5题会做. 然而风格仍然很怪异……还是练少了? A 水题.不过一开始没注意细节挂了几发,罚时罚的真痛…… 明显是能除以 $k$ 就除以 $k$, ...

  8. nRF51822 看门狗和OTA (无线升级功能)的尴尬笔记

    很久没有记笔记了.今天要记点东西,不然以后又忘记了. 随着时代的发展,现在的SDK已经是13.0了.蓝牙5.0也就来了.废话就少说了,记笔记吧. 两年前搞过nRF51822 的无线升级功能,那时候用的 ...

  9. Centos查看虚拟机IP地址及使用XShell连接

    1.在VMware中安装Centos7系统[1] 2.查看虚拟机里的Centos7的IP[2] 1)查看IP 输入ip查询命名 ip addr 发现 ens33 没有 inet 这个属性,那么就没法通 ...

  10. HashMap源码2

    public class test { @SuppressWarnings({ "rawtypes", "unchecked" }) public static ...