#  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. HDU6583:Typewriter(dp+后缀自动机)

    传送门 题意: 给出\(p,q\),现在要你生成一个字符串\(s\). 你可以进行两种操作:一种是花费\(p\)的代价随意在后面添加一个字符,另一种是花费\(q\)的代价可以随意赋值前面的一个子串. ...

  2. httprunner学习25-文件上传multipart/form-data

    前言 httprunner上传文件接口,其实跟requests上传文件的接口是一样的,之前在python接口系列里面有案例 python接口自动化16-multipart/form-data上传图片 ...

  3. windows server 2008 安装MySQL 8.0 遇到报错 1055 - Expression #1 of ORDER BY clause is not in GROUP BY

    mysql安装参考教程:https://blog.csdn.net/qq_37350706/article/details/81707862 安装完毕后 执行sql语句 SELECT * FROM c ...

  4. python面试题以及答案

    目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...

  5. 学习Spring-Data-Jpa(九)---注解式方法查询之@NamedQuery、@NamedNativeQuery

    1.@NamedQuery.@NamedNativeQuery @NamedQuery与@NamedNativeQuery都是定义查询的一种形式,@NamedQuery使用的是JPQL,而@Named ...

  6. 模拟赛T2 线段树优化建图+tarjan+拓扑排序

    然而这只是 70pts 的部分分,考场上没想到满分怎么做(现在也不会) code: #include <cstdio> #include <string> #include & ...

  7. plv8 require 模块试用

    plv8 是postgres 的一个比较强大的插件,社区有人基于babel,browserify 实现了一个方便的require 模块加载 实际上官方也有介绍过了类似的基于数据库存储js,然后通过ev ...

  8. eclipse中自动生成serialVersionUID

     serialVersionUID作用:  序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.       如果你修改代码重新部署后出现序列化错误,可以考虑给相应的类增加seri ...

  9. shell编程题(五)

    打印root可以使用可执行文件数. echo "root's bins: $(find ./ -type f | xargs ls -l | sed '/-..x/p' | wc -l)&q ...

  10. Computer-Hunters——项目系统设计与数据库设计

    Computer-Hunters--项目系统设计与数据库设计 前言 本次作业属于2019秋福大软件工程实践Z班 本次作业要求 团队名称: Computer-Hunters 本次作业目标:撰写一份针对团 ...