网络爬虫_Scrapy框架入门

什么是Scrapy? (百度百科)

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

一、基本功能

Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

尽管Scrapy原本是设计用来屏幕抓取(更精确的说,是网络抓取),但它也可以用来访问API来提取数据。

二、架构

网络爬虫_Scrapy框架入门

绿线是数据流向

_Scrapy Engine(引擎) :_负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

_Scheduler(调度器):_它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

_Downloader(下载器):_负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。

_Spider(爬虫):_它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。

_Item Pipeline(管道):_它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。

Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):一个可以自定扩展和操作引擎和Spider中间通信的功能组件。

四、Scrapy安装以及生成项目

1、下载方式:widows ,打开一个cmd,安装需要的包

pip install wheel

pip install lxml

pip install twisted

pip install pywin32

pip install scrapy

2、打开cmd ,输入(默认是在C:\Users\Administrator>这个目录下,你可以自行切换)

scrapy startproject 项目名

scrapy genspider 爬虫名 域名

scrapy crawl 爬虫名 (执行爬虫)

网络爬虫_Scrapy框架入门

创建后目录大致页如下

|-ProjectName #项目文件夹

|-ProjectName #项目目录

|-items.py #定义数据结构

|-middlewares.py #中间件

|-pipelines.py #数据处理

|-settings.py #全局配置

|-spiders

|-init.py #爬虫文件

|-baidu.py

|-scrapy.cfg #项目基本配置文件
3、用pycharm打开文件

spiders下的baidu.py是scrapy自动为我们生成的

下面再看一下spdier项目的配置文件,打开文件settings.py

  • CONCURRENT_ITEMS:项目管道最大并发数
  • CONCURRENT_REQUESTS: scrapy下载器最大并发数
  • DOWNLOAD_DELAY:访问同一个网站的间隔时间,单位秒。一般默认为0.5 DOWNLOAD_DELAY到1.5 DOWNLOAD_DELAY之间的随机值。也可以设置为固定值,由 RANDOMIZE_DOWNLOAD_DELAY指定是否固定,默认True随机。这里的同一个网站可以是域名也可以是IP,由 CONCURRENT_REQUESTS_PER_IP的值决定。
  • CONCURRENT_REQUESTS_PER_DOMAIN:对单个域名的最大并发
  • CONCURRENT_REQUESTS_PER_IP:对单个IP的最大并发,如果值不为0,则 CONCURRENT_REQUESTS_PER_DOMAIN参数被忽略,而且 DOWNLOAD_DELAY这个参数的同一网站指的是IP
  • DEFAULT_ITEM_CLASS:执行scrapy shell 命令的默认item类,默认 scrapy.item.Item
  • DEPTH_LIMIT:爬取的最大深度
  • DEPTH_PRIORITY:正值为广度优先(BFO),负值为深度优先(DFO),计算公式: request.priority = request.priority - ( depth * DEPTH_PRIORITY )
  • COOKIES_ENABLED: 是否启用cookie中间件,也就是自动cookie管理
  • COOKIES_DEBUG:将请求cookie和响应包含Set-Cookie的写入日志
  • DOWNLOADER_MIDDLEWARE:下载器中间件和优先级的字典
  • DEFAULT_REQUEST_HEADERS:用于Scrapy HTTP请求的默认标头
  • DUPEFILTER_CLASS:去重的类,可以改成使用布隆过滤器,而不使用默认的
  • LOG_ENABLED:是否启用日志
  • LOG_FILE:日志文件路径,默认为None
  • LOG_FORMAT:日志格式化表达式
  • LOG_DATEFORMAT: LOG_FORMAT中的时间格式化表达式
  • LOG_LEVEL:最低日志级别,默认DEBUG,可用:CRITICAL, ERROR, WARNING, INFO, DEBUG
  • LOG_STDOUT:是否将所有标准输出(和错误)将被重定向到日志,例如print也会被记录在日志
  • LOG_SHORT_NAMES:如果为True,则日志将仅包含根路径;如果设置为False,则显示负责日志输出的组件
  • LOGSTATS_INTERVAL:每次统计记录打印输出之间的间隔
  • MEMDEBUG_ENABLED:是否启用内存调试
  • REDIRECT_MAX_TIMES:定义可以重定向请求的最长时间
  • REDIRECT_PRIORITY_ADJUST:调整重定向请求的优先级,为正值时优先级高
  • RETRY_PRIORITY_ADJUST:调整重试请求的优先级
  • ROBOTSTXT_OBEY:是否遵循robot协议
  • SCRAPER_SLOT_MAX_ACTIVE_SIZE:正在处理响应数据的软限制(以字节为单位),如果所有正在处理的响应的大小总和高于此值,Scrapy不会处理新的请求。
  • SPIDER_MIDDLEWARES:蜘蛛中间件
  • USER_AGENT:默认使用的User-Agent

我们主要配置下面五个:

网络爬虫_Scrapy框架入门

到这里我们尝试用scrapy做一下爬取,打开spider.py下的baidu.py(取决于你scrapy genspider 爬虫名 域名时输入的爬虫名)

输入一下代码,我们使用xpath提取百度首页的标题title

网络爬虫_Scrapy框架入门

打开一个终端cmd,输入scrapy crawl baidu(爬虫名),就可以看到一大堆输出信息,而其中就包括我们要的内容。但是使用终端运行太麻烦了,而且不能提取数据,我们一个写一个run文件作为程序的入口,splite是必须写的,目的是把字符串转为列表形式,第一个参数是scrapy,第二个crawl,第三个baidu

网络爬虫_Scrapy框架入门

直接运行就可以在编辑器中输出了

网络爬虫_Scrapy框架入门

案例推荐:https://blog.csdn.net/ck784101777/article/details/104468780/

Original: https://www.cnblogs.com/zzc1102/p/16096268.html
Author: and脱发周大侠
Title: 网络爬虫_Scrapy框架入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599564/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mysql 数据恢复逻辑 基于binlog redolog undolog

    注:文中有个易混淆的地方”事务” sql事务,即每次数据库操作生成的事务,这个事务trx_id只在undolog里存储,因为MVVC需要记录修改的事务id,…

    数据库 2023年6月16日
    0109
  • CentOS7源码安装MySQL

    CentOS7源码安装MySQL 1:安装依赖包 执行:yum -y install ncurses-devel gcc- bzip2- bison 2:升级cmake工具(我用的…

    数据库 2023年6月6日
    090
  • Mybatis-Spring源码分析

    Mybatis-Spring 博主技术有限,本文难免有错误的地方,如果您发现了欢迎评论私信指出,谢谢JAVA技术交流群:737698533 当我们使用mybatis和spring整…

    数据库 2023年6月16日
    099
  • MySQL中常用的数据类型

    在写sql语句的时候,数据类型是避不可少的一个环节,以下是我在学习的过程中总结的数据类型,仅供参考: 数值类型 您可以在上表中看到,每种类型都有其对应的范围。如果它大于某个值,则不…

    数据库 2023年5月24日
    097
  • MySQL锁:01.总览

    锁总览 锁的作用 加锁流程 锁对数据库的影响 锁等待 死锁 锁类型 锁范围 锁方式 全局锁 全局读锁 全局QC锁 QC锁存在的问题: 备份锁 backup lock MDL锁 MD…

    数据库 2023年6月16日
    0131
  • 线程池系列一:线程池原来是个外包公司,打工人我悟了

    我们在工作中经常用到线程池,线程池(Thread Pool)是一种基于池化思想管理线程的工具。 线程的作用是处理任务,而池则是帮助我们实现资源的重复利用和管理。线程池就是帮助我们异…

    数据库 2023年6月6日
    0103
  • == 和 equals 的区别

    1. == 概念:==是一个比较运算符 == 既可以判断基本类型,又可以判断引用类型 ==判断基本类型时,判断的是值是否相等。示例:int i = 10; ==判断引用类型时,判断…

    数据库 2023年6月11日
    0102
  • MySQL的文件系统(Linux环境)

    /var/lib/mysql/ 可通过以下sql命令查看: mysql> show variables like ‘datadir’; +—————+–…

    数据库 2023年5月24日
    076
  • MyBatis(三)-动态SQL

    1、if 注意:test里面使用的参数,可以是mybatis的默认参数,也可以是实体属性名,但是不能是没有指定别名的参数名(尤其是单个参数,也必须起别名,否则异常); 单独使用if…

    数据库 2023年6月16日
    094
  • 计科书单

    看来书单太长 两部分还是不够… 这一部分是计科的, 有计科概论、数据结构与算法、汇编、编译、数电、数字逻辑、计组、操作系统、计网等 计科概论计算机科学导论计算机科学概论…

    数据库 2023年6月11日
    070
  • 常用的Linux命令

    获取linux服务器所有java进程及名称 pidof java|xargs pwdx pidof:用于查找指定名称的进程的进程号id号-s 一次只显示一个进程号-c 只显示运行在…

    数据库 2023年6月14日
    087
  • cv2简单使用(opencv-python)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月9日
    071
  • MySQL InnoDB索引原理

    数据库与I/O原理 数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。 I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数…

    数据库 2023年6月14日
    0101
  • HyperLogLog

    HyperLogLog 基数计数,不绝对准确。省空间,速度快 估计基数,对数级空间节省 可以理解为一种压缩,把基数压缩成二进制位数,只存储位数,如果旧有的数据再加入时肯定不会改变位…

    数据库 2023年6月9日
    077
  • MySQL Operator 01 | 架构设计概览

    高日耀 资深数据库内核研发毕业于华中科技大学,喜欢研究主流数据库架构和源码,并长期从事分布式数据库内核研发。曾参与分布式 MPP 数据库 CirroData 内核开发(东方国信),…

    数据库 2023年5月24日
    0110
  • springboot~RedisTemplate三种序列化方式

    RedisTemplate默认使用二进制hex的方式进行持久化,它对象的值存储到redis里,当然,你的对象需要先实现 java.io.Serializable接口,这种方式兼容性…

    数据库 2023年6月6日
    0200
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球