#  settings 配置 UA
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中如何提升爬取数据的效率?

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

请求传参(深度爬取)

  • 深度爬取:

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

scrapy的五大核心组件

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

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. python中列表(list)函数及使用

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  2. 云服务器ECS(Elastic Compute Service),知识点

    资料 网址 什么是云服务器ECS https://help.aliyun.com/document_detail/25367.html?spm=a2c4g.11186623.6.544.4e1e376 ...

  3. update mantis_bug_table

    update mantis_bug_table set mantis_bug_table.original_due_date=mantis_bug_table.due_date ,) ,);

  4. Comet OJ 夏季欢乐赛 烤面包片

    烤面包片 https://cometoj.com/contest/59/problem/C?problem_id=2698 题目描述 鸡尾酒最喜欢吃东北的烤面包片了.每次到东北地区的区域赛或者是秦皇岛 ...

  5. 常用dos命令(4)

    系统管理at 安排在特定日期和时间运行命令和程序shutdown立即或定时关机或重启taskkill结束进程(WinXPHome版中无该命令)tasklist显示进程列表(Windows XP Hom ...

  6. 6.使用Go向Consul注册的基本方法

    编写注册函数 package utils import ( consulapi "github.com/hashicorp/consul/api" "log" ...

  7. Table to List<object> C#

    我们有 myobj 是这样的 public class MyObj { public string Name { get; set; } public int ID { get; set; } } 再 ...

  8. 使用Python3进行AES加密和解密 输入的数据

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  9. Nothing to say

    1. This moment will nap, you will have a dream; but this moment study, you will interpret a dream.此刻 ...

  10. 讲课专用——线段树——BSS

    题目链接:http://codevs.cn/problem/3981/ 题解: 线段树求GSS模板题 一.一段长的区间的 GSS 有三种情况:>1 完全在左子区间>2 完全在右子区间> ...