Scrapy框架基础

Scrapy框架——初认识 Scrapy是一个高效的Python爬虫框架,旨在简化网站数据的抓取和结构化提取。它基于Twisted异步网络框架,能够显著提升爬虫的下载速度。Scrapy的核心组件包括引擎、调度器、下载器、爬虫和管道,这些组件通过引擎进行数据传递和协调。Scrapy的工作流程包括请求的调度、下载、数据处理和存储,开发者只需实现少量代码即可快速抓取数据。Scrapy的安装可以通过pip命令完成,创建项目后,开发者可以通过命令行生成爬虫并完善其逻辑,使用XPath等方法提取数据,并通过管道进行数据存储。Scrapy的异步和非 阅读详情

Scrapy

  • 概念:是一个爬虫框架,提取结构性的数据。其可以应用在数据挖掘,信息处理等方面。提供了许多的爬虫的基类,帮我们更简便使用爬虫。基于Twisted

安装

  • 首先安装依赖库Twisted
    pip install (依赖库的路径)
    依赖库:lxml,twisted
    pip install lxml

在线安装twisted:
pip install twisted
pip install -i https://pypi.tuna.tsinghua.edu/sample twisted
镜像:https://pypi.tuna.tsinghua.edu/simple xxx
http://mirrors.aliyun.com/pypi/simple xxx
http://pypi.douban.com/simple xxx
离线安装twisted:
首先在http://www.lfd.uci.edu/~gohlke/pythonlibs#twisted这个网址下找到和你的python对应的twisted下载离线安装包
pip install 离线安装包的路径

安装:scrapy
pip install scrapy

测试是否安装成功:
终端下输入:scrapy如果不报错并且显示scrapy的版本信息则安装成功

【注意】路径名不能有中文,不能用管理员进入cmd,电脑系统用户路径不能是中文

scrapy工作原理

在这里插入图片描述

使用scrapy

工程创建与工程的结构
  • 命令:scrapy startproject 工程名
    工程目录结构:
(2)项目目录结构
		firstSpider
			firstSpider
				spiders           爬虫目录(写代码位置)
					__init__.py
					myspider.py       爬虫文件,以后的爬虫代码写在这里
				__init__.py
				items.py          	  定义数据结构地方
				middlewares.py    中间件(了解)
				pipelines.py      管道文件
				settings.py       项目配置文件
			scrapy.cfg
  • spiders文件夹:定义爬虫文件(通过命令创建爬虫)

  • items文件:数据模型,用于将待爬虫的数据进行模型化(我们在爬取一个页面之前首先要在items文件中定义出我们要爬取的那些页面的元素)

  • middlewares文件:中间件,处理请求与响应等过程中的一些事务,scrapy中有两种中间件,即下载中间件和爬虫中间件。

  • pipelines文件:管道文件,处理解析以后的数据。

  • settings文件:配置文件,主要用于设置爬虫的相关配置(比如:用户代理、robots协议等)

  • 创建爬虫:
    指令:scrapy genspider [-t 爬虫模板] 爬虫名 域名

scrapy的架构与组成模块
  • 核心部分:引擎、调度器、下载器三大部件;这些部分的代码不在项目工程中体现,这些代码在scrapy的安装目录下。
    • 引擎:协调各个部件之间的工作,并且驱动整个系统
    • 调度器:用于接收引擎的调度,把引擎调度过来的url取出放入到调度队列中进行调度
    • 下载器:由调度器来调度下载器进行异步请求
  • 自定义部分:爬虫、管道两大部件。
    • 爬虫:是spider中的一个类,有大功能,即给引擎提供起始url,对下载器下载下来的数据进行解析。
    • 管道:爬虫解析完数据以后会把数据传给管道,管道对数据进行后期的处理(例如:存储等操作)
  • 其他组件(主要用于扩展爬虫的功能)
    中间件、items、用户代理等
运行爬虫

提示:windows用户安装一个插件:pip install pywin32
运行指令:运行爬虫 scrapy crawl 爬虫名 [-o xx.json/xml/csv]
例如: scrapy crawl qiubai -o qiubai.json
scrapy crawl qiubai -o qiubai.xml
scrapy crawl qiubai -o qiubai.csv

组建的使用

管道组件:首先要在settings文件将管道开启
ITEM_PIPELINES = {
‘MyfirstPro.pipelines.MyfirstproPipeline’: 300,
}

Scrapy运行的原理(即scrapy的执行流程)

  • 1)键入scrapy crawl xxx, 用爬虫xxx来驱动引擎开始工作
  • 2)引擎驱动起来首先加载scrapy依赖程序(比如:lxml、twisted等),加载完依赖程序以后,?引擎就可以正常工作
  • 3)引擎加载setting文件,从中读取当前工程的配置信息,根据配置信息去安排后面的工作
  • 4)引擎加载扩展程序,我们不需要修改,主要对引擎的功能进行扩展
  • 5)引擎加载下载中间件
  • 6)引擎加载爬虫中间件
  • 7)引擎加载管道的一些列组件
  • 8)(说明:以上7个步骤都是准备阶段,当准备工作完了,就可以正常运行)引擎根据键入的xxx这个爬虫的名字,来找到对应的类并且将该类实例化,把工程中所有引入的中间件和管道组件类都实例化
  • 9)引擎会从实例化的xxx这个爬虫对象的start_urls中提取出起始url,并且检验是否在allowed_domains里面,如果在则将这些url加入到调度器的调度队列中。
  • 10)调度器对调度队列的url进行出队,然后创建若干个异步的高性能的下载器对象来下载url(注意:如果调度队列url的数量多于最大并发量,则多出的那些url等待)
  • 11)下载器将url请求(请求的过程会讲过若干层的下载中间件的过滤),并且获得响应,然后将响应的数据通过回调函数传递给爬虫对象
  • 12)爬虫对象对传递过来的响应数据进行解析,并且将解析的数据封装到一个可迭代的容器中,返回给引擎。
  • 13)如果管道已经开启,引擎会根据管道的优先级顺将爬虫返回过来的数据依次传递给各个管道
  • 14)管道对响应数据进行最后的处理,处理结束以后数据在返回给引擎由引擎来销毁
  • 15)关闭爬虫、中间件和管道然后关闭引擎,并且输出这次爬虫的一些请求与响应以及调度等信息。

主要代码

#spider里爬虫

# -*- coding: utf-8 -*-
import scrapy
class QiubaiSpider(scrapy.Spider):
    # 这个是爬虫类,是scrapy.Spider的子类,即是一个基础爬虫类

    # 第一块:name、allowed_domains、start_urls等属性
    name = 'qiubai' # name属性是爬虫的名字,这个属性是爬虫在当前工程中的唯一标识,我们在启动引擎的时候需要将爬虫的名字带入到启动命令,告诉引擎,当前是哪个驱动的引擎,引擎就会给对应的爬虫类创建实例对象

    allowed_domains = ['qiushibaike.com'] # 允许访问的那些域名,用于限制爬虫的爬取范围,一旦域名不合法,就不允许爬

    start_urls = ['https://www.qiushibaike.com/text/page/1/']
    # 当引擎驱动起来以后首先会给当前爬虫类创建出一个实例对象,然后从这个成员变量中取出start_urls,把这些url先从allowed_domains里面过滤一遍,然后把符合的url加入到调度器的调度队列中去

    # 第二块:parse函数
    def parse(self, response):
        # 这个方法是一个回调,下载器下载完成数据以后会回调这个函数,把下载下来的响应内容传递给response
        print("我们获得的响应对象为:",response)
        # 解析响应体
        # 【注意】scrapy自带xpath和css两种解析方法
        qiu_list = response.xpath("//div[starts-with(@id,'qiushi_tag')]")
        for qiu in qiu_list:
            item = {}
            item["conent"] = "".join(qiu.xpath(".//div[@class='content']//text()").extract())
            # scrapy自带的xpath解析出来的内容是一系列的selector对象,我们需要从这些selector对象中把内容取出来
            item["author"] = qiu.xpath(".//h2/text()").extract()[0]
            # print(item)

            yield item
            # parse函数最后要返回一个可迭代对象,这个返回值会被引擎继续接收,引擎一旦接收到这个可迭代对象,就会立即对该对象进行迭代


#管道组件代码

import redis

class MyfirstproPipeline(object):
    # 这个类是object的一个派生类,是一个普通类,但是我们把它引入了管道组件中,它就有具有的管道类的能力
    # 【注意】爬虫类和管道类的实例同时产生同时销毁

    # 一个管道类实例的生命周期
    def open_spider(self,spider):
        # 这个函数,当前爬虫开启的时候被调用
        print("%s爬虫已经开启!"%spider)
        # 创建redis链接
        self.rds = redis.StrictRedis(host="redis主机名",port=6379,db=9)

    def process_item(self, item, spider):
        # 这个方法,在引擎迭代的过程中不断的被调用,并且把当前迭代的数据传递给item
        print("当前爬虫%s正在迭代数据:%s"%(spider,item))
        self.rds.lpush("qiubai",item)

        return item # 我们处理完一个数据以后一定把这个数据重新返回给引擎,由引擎来处理
        # 【注意】如果这里不返回,每一次迭代的item在这里就会被销毁,引擎就那不到这个数据,后面的管道也无法使用该数据

    def close_spider(self,spider):
        print("爬虫%s被关闭!"%spider)
		


#配置文件settings
ITEM_PIPELINES = {
    # 组件名ITEM_PIPELINES,这个组件是一个多值组件,它的值用一个字典来表示
 'MyfirstPro.pipelines.MyfirstproPipeline': 300,}
 # 每个键值对都是一个管道,键代表当前管道的位置(这个位置可以是工程文件的位置,也可以是scrapy系统的位置),值代表当前管道的优先级,这个值越小优先级越大;爬虫返回到引擎中的数据会根据优先级的顺序依次的进入各个管道
#用户代理
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
#robots文件检测
ROBOTSTXT_OBEY = False






scrapy爬虫框架 scrapy爬虫框架、分布式爬虫 阅读详情

相关推荐

scrapy,python离线安装所有安装包

完全离线安装python3,离线安装scrapy,及各种安装过程中需要的系统包和python包

Scrapy安装教程

一、说明 安装Scrapy,需要先安装各种依赖库,因为这是一个庞大的框架,需要很多底层,如果不知道有什么,先不用管,先把主要的装好再说。 二、安装Twisted 这个第三方库pip无法直接安装,我们需要下载该库后离线安装。可去https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted中下载(注意:一定要下载对,与自己的python版本以及电脑对应) 如:Twisted-20.3.0-cp38-cp38-win_amd64.whl对应的为6 位电脑的python3.

ymx12349的博客 1169

Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型

本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。

weixin_29230649的博客 103

windows下使用pip离线安装Scrapy库(只能这样做)

Scrapy库不能直接使用 pip install 库名 安装,我们只能选择离线方式安装Scrapy 一、先windows环境下永久修改pip镜像源,加速下载安装速度,因为下载的依赖库数量较多,需要网速保障,但是国外的网站响应速度实在不敢恭维。已经修改pip镜像源的,可忽略 (1):在windows文件管理器中,输入%APPDATA% (2):会定位到一个新的目录下,在该目录下新建pi...

Xiaoyeforever的博客 2892

解决turmex安装kali报错问题

在手机上安装好turmex后,都喜欢安装一个Linux系统,我当时安装的时kali,但是安装过程中,报错不断。 2019.8.24更新 1,出现问题首先看下载kali源文件是否完整 安装步骤中,会显示[解压中.....] ,可以看到解压的大小。 如图所示,完整源文件不小于81M。 如果源文件过小,则说明下载错误,而且在remove kali这个命令下,是不会删除源文件的,下一次安装只...

WeiLuckyStrike的博客 1万+

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 803

pip 离线安装 scapy

的安装文档或在相关的技术论坛上寻求帮助。此外,确保你的离线安装包与你的操作系统和 Python 版本兼容。请注意,离线安装可能会因缺少依赖库或其他问题而失败。如果遇到问题,你可以参考。会自动解压和安装离线包及其依赖库。

zengliguang的专栏 1298

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 726

【亲测免费】 快速解决Scrapy安装难题:Twisted离线安装包推荐

快速解决Scrapy安装难题:Twisted离线安装包推荐 【下载地址】Python3.8Twisted安装文件分享 本仓库提供了一个用于解决在安装Scrapy时遇到的Twisted依赖问题的资源文件。具体文件为 `Twisted-19.10.0-cp38-cp38-win_amd64.whl`,适用于Python 3....

gitblog_06515的博客 526

Go语言面试:面试中经常被问到的50个经典面试题(附参考答案)

Go语言核心知识点摘要 基础语法与数据结构 make和new区别:new分配零值内存返回指针,make初始化引用类型返回实例 Slice底层:包含指针、长度、容量的结构体,多个slice可共享底层数组 nil与空slice:nil指针为nil,空slice指针非nil但JSON编码不同 Map原理:哈希表实现,非线程安全,扩容策略影响性能 for range注意:循环变量是拷贝,map遍历无序 defer执行:LIFO顺序,函数返回前执行 Struct比较:仅当所有字段可比较时才可比较 参数传递:只有值传递

数据知道的博客 4721

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

statistics+insight+vista+power 359

Scrapy 框架介绍 [Scrapy 框架概述][Scrapy 框架的特点][Scrapy 框架的架构概述]

Scrapy 是一个适用于 Python 的一个快速、高层次的、开放源代码的屏幕抓取和 web 抓取的应用程序框架,用于抓取 web 站点并从页面中提取结构化的数据,可用于各种有用的应用程序。 Scrapy 常应用在包括数据挖掘、监测、信息处理、存储历史数据(历史档案)或自动化测试等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

码农阿杰的博客 3807

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4758

Scrapy 框架基础

官网:https://docs.scrapy.org/en/latest/topics/commands.html查看全部可用命令的帮助信息,或指定命令的详细信息# 全部命令 scrapy - h # 指定命令详细信息 scrapy 命令 - h全局命令不需要切换至项目文件夹项目命令需要切换至项目文件夹。

weixin_48183870的博客 1515

基于YOLOv10的PCB电子元件智能识别系统设计与实现

数据预处理模块:负责对原始PCB图像进行标注、增强和格式转换模型训练模块:基于YOLOv10架构进行模型训练和优化推理检测模块:加载训练好的模型进行实时检测用户界面模块:提供友好的交互界面,方便用户操作和结果可视化YOLO(You Only Look Once)系列算法自2016年提出以来,经历了多次迭代更新。YOLOv1-v3:奠定了YOLO系列的基础架构YOLOv4-v7:引入大量优化技巧和网络结构改进YOLOv8-v9:进一步优化模型结构和训练策略YOLOv10。

YOLO 156

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

scrapy框架简介

一、scrapy简介 Scrapy 是用纯 Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架, 用途非常广泛 Scrapy 使用了 Twisted(其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快 我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成 各种需求 (1)、下载scrapy pip install scrapy 二、scrapy开发流程 1、新建项目 scrapy startproject 项目名 2、新建spider–爬虫模板 先

markshui的博客 5853

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Scrapy框架

Scrapy基本流程1.首先说一下框架的概念。之前一直故步自封与一个requests+bs4以及一些Selenium+Phantomjs零零散散的一些爬虫流程。从招聘网站上看到python爬虫的工作都需要掌握Scrapy框架以及Selenium技术才恍然大悟,一个成型的框架首先搭建好了一个完整的爬虫逻辑,各个功能也相对封装的很棒,对于大规模数据爬取,只要将对主要爬虫细节进行设计(每个网页的结构特点不

诺亚废船 3255

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【python爬虫】之scrapy框架介绍

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。

GR001009的博客 2788

爬虫之Scrapy框架

Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。............

XWenXiang的博客 2413

Scrapy框架学习

快速入门scrapy

yimoxi_no1的博客 1725

Python爬虫框架Scrapy——《Python爬虫框架Scrapy》

在项目中创建一个或多个爬虫,定义要抓取的URL、提取数据的规则等。Scrapy允许开发者创建自定义的命令和扩展,以添加新的功能或修改现有功能。通过编写自定义命令,开发者可以添加新的爬取逻辑或数据处理流程。而扩展则提供了一种更通用的方式,用于添加全局功能或修改Scrapy的默认行为。Scrapy作为一个功能强大的Python爬虫框架,提供了丰富的组件和高级特性,使得爬虫开发变得更加简单、高效和灵活。

Python老吕的博客 1356

Scrapy框架介绍

Scrapy 是一个基于 Python 开发的爬虫框架,可以说它是当前Python爬虫生态中最流行的爬虫框架,该框架提供了非常多爬虫相关的基础组件,架构清晰,可扩展性极强。基于Scrapy,我们可以灵活高效地完成各种爬虫需求。在学习,我们大多是基于requests 或 aiohttp 来实现爬虫的整个逻辑的。可以发现,在整个过程中,我们需要实现爬虫相关的所有操作,例如爬取逻辑、异常处理、数据解析、数据存储等,但其实这些步骤很多都是通用或者重复的。

W_chuanqi的博客 1545

关于 scrapy框架 详解

Scrapy 的数据提取不是直接用字典,而是专门定义一个。

Triste__chengxi的博客 2063

Scrapy 框架

Scrapy 框架 * Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 * 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。 * Scrapy 使用了 Twisted’twɪstɪd异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可...

qq_19782697的博客 860

Scrapy 爬虫框架

Scrapy 爬虫框架 1. 概述 ​ Scrapy是一个可以爬取网站数据,为了提取结构性数据而编写的开源框架。Scrapy的用途非常广泛,不仅可以应用到网络爬虫中,还可以用于数据挖掘、数据监测以及自动化测试等。Scrapy是基于Twisted的异步处理框架,架构清晰、可扩展性强,可以灵活完成各种需求。 ​ 在Scrapy的工作流程中主要包括以下几个部分: ​ § Scrapy Engine(框架的引擎):用于处理整个系统的数据流,触发各种事件,是整个框架的核心。 ​ § Scheduler(调度器

Bruce_xiaowei的博客 1万+
上一篇: 面向对象
下一篇: 利用协程爬取某网站
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值