scrapy框架介绍(scrapy框架流程)
ccwgpt 2024-09-27 07:28 105 浏览 0 评论
Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化数据的应用程序框架。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试;
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等;
1.Scrapy五大基本构成
- Scrapy框架主要由五大组件组成,分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine);
- 调度器:可以假设成一个URL的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址;
- 下载器:是所有组件中负担最大的,用于高速地下载网络上的资源;
- 爬虫:是用户最关心的部份,用户定制自己的爬虫,用于从特定的网页中提取自己需要的信息,也可以从中提取出链接,让Scrapy继续抓取下一个页面;
- 实体管道:用于处理爬虫提取的实体,要的功能是持久化实体、验证实体的有效性、清除不需要的信息;
- Scrapy引擎:是整个框架的核心,用来控制调试器、下载器、爬虫,实际上引擎相当于计算机的CPU,控制着整个流程;
2.使用scrapy框架爬取网页数据
- 第一步:首先要使用scrapy框架需要先安装它,可以使用pip安装scrapy框架,注意如果在Windows系统下直接使用pip命令行安装可能会报错,这时需要手动安装几个依赖库如wheel、lxml、Twisted、pywin32等,报错信息会提示你缺少哪个库。
- 这里提一下Twisted插件的安装,它的下载地址为:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted, 进入后找到twisted,选择下载对应的版本,其中cp表示python版本,下载完成后进入终端,输入pip install Twisted-19.2.0-cp37-cp37m-win_amd64.whl,这里注意你下载的是哪个版本就输入哪个版本的文件名,安装完成后再输入pip install scrapy就能成功安装scrapy框架了;
- 第二步:创建爬虫项目,创建储存 scrapy 文件夹scrapy_python,然后在命令行工具中cd进入这个项目路径,用 scrapy startproject 名称命令新建项目;
- 这样我们就成功的创建了一个scrapy项目,我们在PyCharm中看看
- 第三步:可以在刚刚创建的项目的spiders文件夹中创建一个蜘蛛文件,用于爬取网页数据的,我们试着爬取一下csdn网站,那么新建蜘蛛的命令行是:scrapy genspider csdn www.csdn.net,其中csdn是你创建的蜘蛛的文件名,而www.csdn.net表示爬取的目标网址的域名,你想爬取哪个网站就使用哪个网站的域名。
- 第四步:如果要启动我们创建的蜘蛛文件,我们可以使用命令行:scrapy crawl csdn,这里的csdn是蜘蛛文件中name的对应值;
- 第五步:想要测试爬去数据是否成功,我们可以在项目的模板中创建一个测试文件,如:start_spider.py,然后通过debug来进行项目调试,可以输出我们想要爬取的网页数据;
from scrapy.cmdline import execute execute(["scrapy", "crawl", "csdn",])
- 第六步:爬取数据时需要遵循爬虫协议,它用来限定爬虫程序可以爬取的内容范围,位于scrapy 项目的 settings.py文件中默认 ROBOTSTXT_OBEY = True,即遵守此协议,当我们想要爬取的内容不符合该协议但仍要爬取时,可以设置 ROBOTSTXT_OBEY = False,表示不遵守此协议;
- 第七步:这样我们就可以开始使用Xpath选择器或者CSS选择器来解析想要爬取的页面数据了;
3.Xpath选择器的介绍
- XPath的全称是XML Path Language,即XML路径语言,它是一种在结构化文档中定位信息的语言,XPath使用路径表达式来选取XML文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的;
- 谓语用来查找某个特定的节点或者包含某个指定的值的节点,谓语嵌在方括号中,比如//body//a[1]表示选取属于body 子元素的第一个 a 元素,//a[@href]表示选取所有拥有名为 href 的属性的 a 元素等;
- 除了索引、属性外,Xpath还可以使用便捷的函数来增强定位的准确性,如contains(s1,s2)表示如果s1中包含s2则返回true,反之返回false、text()表示获取节点中的文本内容、starts-with()表示从起始位置匹配字符串;
使用XPath
我们来通过XPath选择器爬取网站中我们想要爬取的信息,如下图我们来爬去今日推荐中的标题
import scrapy class CsdnSpider(scrapy.Spider): name = 'csdn' allowed_domains = ['www.csdn.net'] start_urls = ['http://www.csdn.net/'] def parse(self, response): # 选择所有class="company_name"的h3元素下的a元素的文本 result = response.xpath('//h3[@class="company_name"]/a/text()').extract() # 将得到的文本列表循环 for i in result: print(i)
我们来看一下输出打印,看看是不是我们想要的结果
参考:https://www.9xkd.com/user/plan-view.html?id=2020510935
相关推荐
- 十分钟让你学会LNMP架构负载均衡(impala负载均衡)
-
业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...
- AGV仓储机器人调度系统架构(agv物流机器人)
-
系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...
- 远程热部署在美团的落地实践(远程热点是什么意思)
-
Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...
- springboot搭建xxl-job(分布式任务调度系统)
-
一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...
- 大模型:使用vLLM和Ray分布式部署推理应用
-
一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...
- 国产开源之光【分布式工作流调度系统】:DolphinScheduler
-
DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...
- 简单可靠高效的分布式任务队列系统
-
#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...
- 虚拟服务器之间如何分布式运行?(虚拟服务器部署)
-
在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...
- 一文掌握 XXL-Job 的 6 大核心组件
-
XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...
- 京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?
-
京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...
- 企业级项目组件选型(一)分布式任务调度平台
-
官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...
- python多进程的分布式任务调度应用场景及示例
-
多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...
- SpringBoot整合ElasticJob实现分布式任务调度
-
介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...
- 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
-
Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...
- SpringBoot任务调度:@Scheduled与TaskExecutor全面解析
-
一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)