网络爬虫_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)

大家都在看

  • Docker Bridge 网络原理

    Docker 的网络子系统是可插拔驱动式的,默认情况下存在或支持多种网络接口,如 bridge、host、overlay、macvlan 以及 none 类型的网络接口。 brid…

    数据库 2023年6月6日
    0105
  • 【StoneDB研发日志】union功能bug记录

    1、问题现象 create database syw_mtr; use syw_mtr; CREATE TABLE t1 (f1 VARCHAR(255) CHARACTER SE…

    数据库 2023年5月24日
    096
  • 常见的限流算法

    通过限制并发访问数或者限制一个时间窗口内允许处理的请求数量来保护系统,例如,通过限流,你可以过滤掉产生流量峰值的客户和服务。 令牌桶算法 令牌桶算法是常见的一种限流算法。假设有一个…

    数据库 2023年6月16日
    087
  • entitybuilder–一个简单的业务通用框架

    关于业务通用框架的思考 业务系统是千差万别的,例如,保存、更新和删除订单,或者保存订单和保存客户,走的根本不是一个流程。但是,它们还是有共同点,它们的流程大致可以分成下面的几个部分…

    数据库 2023年6月6日
    095
  • Sencha Cmd 常用命令

    1、获取帮助 sencha help generate app 2、创建应用程序 sencha -sdk e:\ext\ext6 generate app -classic Sim…

    数据库 2023年6月9日
    095
  • django中的模板层简介

    1.什么是模板层 模板层可以根据视图中传递的字典数据动态生产相应的HTML页面 2.模板层的配置 1.在项目&am…

    数据库 2023年6月14日
    083
  • ImageIo.read 返回null

    一、问题描述 今天收到一个bug就是imageio读取图片会返回null,具体如下 但是其他的图片就没有问题 二、问题分析 结合百度发现这张图片原本的后缀并非是jpg,使用notp…

    数据库 2023年6月6日
    0100
  • HMX-Server-分步式服务器框架(开源+源码)

    (原文地址:http://www.cnblogs.com/hellohuang/p/5492302.html ) 这是一个简单实现有分步式框架,由5个服务进程组成一个服务器,它们分…

    数据库 2023年6月14日
    0118
  • 多商户商城系统功能拆解21讲-平台端分销订单

    多商户商城系统,也称为B2B2C(BBC)平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟,同时满足平台自营…

    数据库 2023年6月14日
    0117
  • java-配置tomcat服务器启动出现闪退解决办法

    1.配置tomcat服务器注意的地方:1.1下载tomcat软件,选择绿色免安装版,解压即可使用。1.2tomcat服务器是java语言编写的,想要运行tomcat需要java环境…

    数据库 2023年6月11日
    0113
  • 设计模式之(3)——抽象工厂方法模式

    定义:抽象工厂模式简单地讲,就是提供一个超级工厂,围绕这个超级工厂创建其他工厂;抽象工厂模式提供一个创建一些列相关或者相互依赖对象的接口; 在此之前我们先来讲一下产品等级和产品族的…

    数据库 2023年6月14日
    079
  • 创建镜像(alpine版)+alpine

    podman用脚本和dockerfile做apache编译安装镜像 1.0安装介质 2.0 特点 2.0 基础命令 3.0 模式 podman用脚本和dockerfile做apac…

    数据库 2023年6月14日
    0105
  • CPU 是如何与内存交互的

    这篇文章主要整理了一下计算机中的内存结构,以及 CPU 是如何读写内存中的数据的,如何维护 CPU 缓存中的数据一致性。什么是虚拟内存,以及它存在的必要性。如有不对请多多指教。 概…

    数据库 2023年6月14日
    098
  • MyBatis(一)-入门

    ==>>MyBatis中文网 1、第一个 mybastis程序 1.1 导入jar包 3.4.1 5.1.47 org.mybatis mybatis ${mybati…

    数据库 2023年6月16日
    095
  • DDD(Domain Driver Design)领域驱动模型

    Domain Primitive(DP) DP概念DP 是 DDD 中的一个基础概念,是 DDD 中可以执行的一个最小单元,最直接的体现是,将业务相关的参数定义在一个特定的领域中(…

    数据库 2023年6月6日
    0135
  • MySQL的FIND_IN_SET函数

    语法:FIND_IN_SET(str,strlist) https://www.cnblogs.com/xiaoxi/p/5889486.html Original: https:…

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