SCRAPY入门学习(待完善)

news/2024/11/14 14:57:10/文章来源:https://www.cnblogs.com/hackzz/p/18393643

Scrapy介绍

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。

Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

Scrapy的运作流程

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
触发时段:
初始化阶段:当Scrapy启动时,引擎会初始化调度器。
请求入队:每当有新的请求生成(例如在start_requests方法或在parse方法中生成新的请求),这些请求都会被发送到调度器。
请求出队:当下载器空闲并准备处理新的请求时,调度器会将下一个请求出队并发送给下载器。
去重处理:调度器会检查新请求是否已经存在于队列中,以避免重复处理。Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载失败的URL,Scrapy也会重新下载。)

制作 Scrapy 爬虫 一共需要4步:

新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
明确目标 (编写items.py):明确你想要抓取的目标
制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
存储内容 (pipelines.py):设计管道存储爬取内容

安装教程略

练习

以爬取https://www.4399.com/flash/的游戏名、日期、分类为例:
查看html结构(只爬取最新小游戏信息)

创建好爬虫项目:scrapy startproject pj1

xiao.py

import scrapyclass XiaoSpider(scrapy.Spider):name = "xiao"allowed_domains = ["4399.com"]start_urls = ["https://www.4399.com/flash/"]#可以添加多个urldef parse(self, response):# txt=response.xpath('/html/body/div[8]/ul/li/a/b/text()').extract()l=response.xpath('/html/body/div[8]/ul/li')lst=[]for i in l:name=i.xpath('./a/b/text()').extract_first()catagroy=i.xpath('./em/a/text()').extract_first()date=i.xpath('./em/text()').extract_first()dic={"name":name,"catagroy":catagroy,"date":date}yield dic # 传给管道的item变量

pipelines.py

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass Pj1Pipeline:def process_item(self, item, spider):print(item)#管道处理方式可以自定义,如写入文件,存入数据库等return item
class rPipeline: #除了初始管道,还可以自定义新管道def process_item(self, item, spider):item['love']='hyx'return item

设置管道优先级(先传入哪个管道处理数据,处理完再传入哪个管道)

请求头添加方法

1.setting.py里面添加

2.中间件添加

3.spider里面添加
在你创建的spider里面写个start_requests方法

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从需求到交付:Leangoo领歌助力敏捷项目成功

​ 在敏捷项目管理中,需求管理是决定项目成功的关键环节。准确捕捉和高效管理需求,不仅能避免项目偏航,还能确保最终交付的产品与客户预期高度契合。Leangoo领歌敏捷工具,正是为此而生,助力团队轻松实现需求管理的每一步。​ 在敏捷项目管理中,需求管理是决定项目成功的关…

自我介绍 + 软工5问

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/这个作业的目标 使用 GitHub 建立一个仓库和在博客园上使用 Markdown 排版写一份随笔自我介绍 我是广东工业大学计算机…

GNN-RAG:以RAG形式将 llm 的语言能力与 gnns 推理进行联合

Paper: https://arxiv.org/abs/2405.20139 知识图(KGs)以三元组(头、关系、尾)的形式表示人类精心制作的事实知识,它们 共同构成了一个图。大型语言模型(Large Language Models, llm)是 QA 任务中最 先进的模型,因为它们具有理解自然语言的卓越能力。另一方面,图神经网络 (G…

经验之谈

如果你想初三自学高中化学或者对化学理解十分不深刻,这篇或许能帮到你。前言 先叠个甲,这个文章全是主观内容,并且说的东西并不适合所有人,请结合自身实际情况仔细鉴别。 写这个文章的原因是我给很多人讲自己怎么学的化学。虽然我自己化学也不算特别好。 但是讲的时候因为我…

机器学习之——决策树信息增益比计算[附加计算程序]

0 前言本文主要介绍决策树信息增益比的计算,并给出例子帮助读者理解。 读者需要具备:信息熵、条件熵、信息增益 相关知识。 本文使用数据集:游玩数据集 1.1节。1 信息增益比计算公式2 信息增益比计算 2.1 gR(play,outlook)的计算 根据信息增益(跳转)相关知识,得出:特征out…

财务知识-什么是计提

什么是计提计提就是“计算”和“提取”,用通俗的方式来讲就是把一些即将发生却没有实际发生,没有实际支付的出现的一部分,像将他们计算出来,进行提取,计入相关的费用和成本,这样操作后,可以更利于我们了解企业的真实利润。为什么要做计提根据企业会计准则,现在大部分的…

在diff的过程中,什么是就地复用

首先,先简单介绍一下什么是diff,在react或者vue框架中。组件更新时,不会直接去操作DOM,而是首先更新虚拟dom。比如一次更新中,更新了10次数据,那么反应到页面上,就会更新10次dom。这是很浪费性能的,所以虚拟dom就产生了,把10从更新,聚集到一块,统一更新一次虚拟dom,…

浙江省建设人才远程继续教育平台刷课脚本-JavaScript编写

脚本 学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page 脚本地址:浙江省建设人才远程继续教育平台刷课脚本: https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本 教程 1.插件安装(以Microsoft Edge浏览器为例)打…

浙江省住房和城乡建设行业继续教育刷课脚本-JavaScript编写

脚本 学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page 脚本地址:浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本: https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本 教程 1.插件安装(以Microsoft Ed…

博客园-awescnb插件-geek皮肤优化-表情配置

💖简介 博客园-awescnb插件-geek皮肤下,表情配置及优化 🔗链接官方配置:https://www.yuque.com/awescnb/user/rycpvv#KwRr4官方配置文档在线Emoji:https://tool.itzd.cn/在线获取Emoji表情🔧配置 🌟配置项:emoji字段 类型 描述 默认值enable Boolean 是否启用 true…

CAS简介

CAS定义 CAS,是Compare and Swap的简称,实现并发算法是常用到的一种技术,在这个机制中有三个核心的参数。1.主内存中存放的共享变量的值:V(一般情况下这个V是内存的地址值,通过这个地址可以获得内存中的值)。 2.工作内存中共享变量的副本值,也叫预期值:A。 3.需要将共…