python scrapy爬取网站数据(一)

news2024/11/16 23:47:38

框架介绍

scrapy中文文档
scrapy是用python实现的一个框架,用于爬取网站数据,使用了twisted异步网络框架,可以加快下载的速度。
在这里插入图片描述

scrapy的架构图,可以看到主要包括scheduler、Downloader、Spiders、pipline、Scrapy
Engine和中间件。各个部分的功能如下:

  1. Schduler:调度器,负责接受引擎发送过来的request,并按照一定的方式进行整理排列、入队,当引擎需要时,交还给引擎
  2. Downloader:下载器,下载请求,将获取到的response交还给scrapy engine,由scrapy engine交给spider来处理。建立在twisted上,异步实现
  3. Spider:爬虫,解析response,提取需要的数据,并将需要跟进的url交还给引擎,再次进入Scheduler
  4. pipeline:管道,对spider解析的数据进行后处理,包括过滤、存储等
  5. Scrapy Engine:中间的通讯、信号、数据传递
  6. 各个中间件:自定义需求的

scrapy的运行流程如下,以关键词搜索爬取处理为例:

  1. 自定义关键词,在schduler中形成指定的url队列
  2. scrapy engine从调度器中取出一个url,并将其封装成request传给downloader
  3. downloader下载资源,封装成response
  4. spider解析response,并将解析出的信息交给pipeline,解析出的url交给scheduler

项目结构

在这里插入图片描述
其中,需要自己写的就是search.py、pipelines.py、items.py这几个文件

  1. search.py:这个是爬取代码,可以根据自己的需求自定义,这里使用的是关键词搜索爬取,所以取名search。里面需要实现的是一个自定义类,该类继承自scrapy.Spider,在类里需要,定义name,一般与文件同名;urls列表;自定义parse函数,用来实现对response的信息解析。
  2. pipelines.py:用来保存数据,可以根据需求自定义对爬取数据的保存方式,一般分为文件保存和sql保存,每种保存方式都会指定的书写格式,并传入指定的参数。同时,需要在setting中定义对应的管道调用指令
  3. items.py:使用scrapy.Field定义存储爬取内容的容器

在这里插入图片描述

其中,后面的数字表示执行的顺序,数字越小 执行优先级越高

执行命令

scrapy crawl xxx # xxx为创建的项目名
scrapy crawl xxx --nolog # 不打印日志运行
scrapy crawl nmdis -o nmdis.csv # 输出到csv文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你如何准备测试数据?

目录 前言: 一、基于 GUI 操作生成 二、调用 API 生成 三、通过数据库操作生成 四、综合运用 API 和数据库的方式生成 前言: 在进行自动化测试时,准备好合适的测试数据是十分重要的。 准备测试数据是我们测试过程中非常重要的一环&…

RocketMQ5.0--顺序消息

RocketMQ5.0–顺序消息 一、顺序消息概览 RocketMQ支持局部消息顺序消费,可以确保同一个消费队列中的消息被顺序消费,如果做到全局顺序消费则可以将主题配置成一个消费队列。并发(默认)消息消费参考​ 《RocketMQ5.0.0消息消费&…

java中对象字段转换

文章目录 前言一、对象属性转换问题二、如何处理转换?三 、处理办法1 利用 JsonProperty 改变转出属性2 利用 JsonAlias 增加接收的属性 总结 前言 在java中,有时候会涉及到一些对象的转换,为什么转换呢? 由于接受参数和用的时候对应不上由于经历过一些修改,为了兼容 一、对…

mac上 如何批量在文件名后加相同的文字?

mac上如何批量在文件名后加相同的文字?不管你是使用windows电脑还是使用mac电脑,很多小伙伴都会在电脑上进行文件批量重命名的操作,不过这项操作对于使用windows系统电脑的小伙伴来说会简单一些,因为在网上可以搜索到很多这样的教…

Python基础:错误与异常

文章目录 错误和异常程序错误异常处理断言处理程序调试 错误和异常 程序错误 程序的错误 ​ python程序中错误通常分为3种类型,即语法错误、运行错误和逻辑错误。 语法错误:源代码中的拼写语法错误,这些错误导致Python编译器无法把Python…

处理 git仓库提交大小写不识别的问题

源码 echo off title Handle name capitalization git config core.ignorecase false echo.&pause新建一个文本改名 处理资源大小写不识别问题.bat 以文编编辑器打开赋值粘贴上面的代码 丢到你的git仓库根目录 双击运行就可以了

知行之桥EDI系统QA第三期:启动知行之桥专题

随着使用知行之桥EDI系统的用户群体日益壮大,在使用过程中,用户可能对系统的工作原理、功能模块和实施过程有一些疑问。近期整理了有关启动知行之桥EDI系统时,常见的几个问题: 一、启动知行之桥服务报错:Failed to st…

王海峰最新发声!

7月6日,2023世界人工智能大会(WAIC)在上海世博中心开幕,众多专家学者、科技领军人才、企业代表共同探讨人工智能赋能产业发展的全新变化,展望技术新趋势。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海…

无法应付大文件、海量文件可靠传输的FTP,用什么替代?

FTP作为世界第一款文件传输协议,在很长时间内,都广泛在世界范围内应用于各个行业和领域的文件传输,FTP解决了文件传输协议有无的问题,填补了互联网传输协议的空缺,极大程度改善了文件传输的困境。 但随着网络技术的发展…

HTTPS 的加密流程详解

HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式: 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。 采用「混合加密」的方式的原因&#…

TiDB(3):TiDB安装部署

https://pingcap.com/docs-cn/stable/overview/#部署方式 1 部署方式选择 https://gitee.com/pingcap/tidb?_fromgitee_search 通过查阅官方文档和网友踩坑经验,建议自己测试的时候使用官网推荐的Docker Compose方式快速构建TiDB集群即可(或者使用单机版) 2 TiDB-L…

【PHP+VUE】手术麻醉临床信息管理系统源码

一、前言 手术麻醉信息系统将为医院手术室带来规范化的工作管理标准、实时快捷的信息流,医疗经验的积累和有效归纳, 全面解决了手术室麻醉过程管理的信息化和数字化。 能够规范手术室的工作流程,实现麻醉、手术过程中的信息数字化和网络化,…

基于Pytorch深度学习的脑肿瘤分类识别(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

第十四章 原理篇:DEIT

参考教程: https://arxiv.org/pdf/2012.12877.pdf https://github.com/facebookresearch/deit 文章目录 概述Knowledge DistillationDEITbase model: VITtransformer blockclass tokenposition embedding Distillation through attention 代码实现DistilledVisionTr…

Java Excel 打开文件报发现“xx.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复问题解决

问题描述: 发现“文件.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复? 问题分析: 1、后端的导出接口写的不对,又返回流数据,又返回响应体数据,导致前端将流数据和响应体数据都下载到了excel文件中。…

web开发应用技术论文范文

web开发技术论文篇一:《WEB开发基本技术实验项目设计》 摘 要:在众多企业开展电子商务的背景下,在管理信息系统网络化发展的趋势下,对经管专业学生阿来说了解并掌握web开发的基本技术知识是十分必要的,为此本文以黄梯云…

Nova: 基于committed relaxed R1CS的IVC方案

Nova是INV的一种实现方案,所谓IVC是指Prover可以向Verifier证明 z i F ( i ) ( z 0 ) z_i F^{(i)}(z_0) zi​F(i)(z0​) 。 最朴素的做法是直接进行i次迭代,每次迭代都进行一次zkSnark,但这样做有三个问题: Prover所需内存大…

软件安全测试流程与方法分享(中)

安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。安全是软件产品的一个重要特性,安全测试也是软件测试重的一个重要类别,本系列文章我们与…

趁规则改变之前,转变思维

在职场和生活中,我们常常强调了解和遵守规则的重要性。无论从事哪个行业、从事何种工作,赚取收入都需要理解并适应游戏规则。然而,规则并非永远不变,它会随着竞争环境、市场条件甚至社会文化的变迁而发生变化。 举个例子&#xff…

LeetCode 打卡day57--动态规划之回文串问题

一个人的朝圣 — LeetCode打卡第57天 知识总结 Leetcode 647. 回文子串题目说明代码说明 Leetcode 5. 最长回文子串题目说明代码说明 Leetcode 516. 最长回文子序列题目说明代码说明 知识总结 今天是动态规划的回文串问题系列 Leetcode 647. 回文子串 题目链接 题目说明 给…