Scrapy入门学习

文章目录

  • Scrapy
    • 一. Scrapy简介
    • 二. Scrapy的安装
      • 1. 进入项目所在目录
      • 2. 安装软件包Scrapy
      • 3. 验证是否安装成功
    • 三. Scrapy的基础使用
      • 1. 创建项目
      • 2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件
      • 3.运行爬虫
      • 4.利用css选择器+Scrapy Shell提取数据
        • 例如:

Scrapy

一. Scrapy简介

Scrapy是一个用于抓取网站和提取结构化数据的应用程序框架,可用于各种有用的应用程序,如数据挖掘、信息处理或历史存档。

尽管 Scrapy 最初是为网络抓取设计的,但它也可以用于使用 API(如Amazon Associates Web Services)提取数据,或用作通用网络爬虫。

其支持:

  1. 使用扩展 CSS 选择器和 XPath 表达式,以及使用正则表达式进行提取的帮助器方法,内置支持从 HTML/XML 源中选择和提取数据。

  2. 一个交互式外壳控制台(IPython 识别),用于尝试 CSS 和 XPath 表达式以抓取数据,在编写或调试爬虫时非常有用。

  3. 内置支持生成信息导出,格式多样(JSON、CSV、XML),并将其存储在多个后端(FTP、S3、本地文件系统)中。

  4. 强大的编码支持和自动检测,用于处理外来、非标准和损坏的编码声明。

  5. 强大的可扩展性支持,允许您使用信号和明确定义的 API(中间件、扩展和管道)插入您自己的功能。

  6. 用于处理的内置扩展和中间件范围广泛

    1. cookie 和会话处理

    2. HTTP 功能,如压缩、身份验证、缓存

    3. 用户代理欺骗

    4. robots.txt

    5. 抓取深度限制

    6. 以及更多

  7. 一个Telnet 控制台,用于连接到 Scrapy 进程中运行的 Python 控制台,以自省和调试您的爬虫

以及其他好处,例如可重复使用的爬虫,用于从站点地图和 XML/CSV 信息中抓取站点,用于自动下载图像(或任何其他媒体)的媒体管道与抓取的项目相关联,一个缓存 DNS 解析器,以及更多!

二. Scrapy的安装

建议在专用虚拟环境 中安装(如 AnacondaMiniconda), 以避免安装时与系统发生冲突。

1. 进入项目所在目录

在文件路径处输入cmd进入命令提示符

2. 安装软件包Scrapy

pip install Scrapy

3. 验证是否安装成功

进入激活后的虚拟环境对应项目目录,输入:

scrapy version

若出现对应scrapy版本号,即说明安装成功

三. Scrapy的基础使用

1. 创建项目

在开始爬取之前,您必须设置一个新的 Scrapy 项目。进入您想要存储代码的目录并运行

scrapy startproject tutorial

这将创建一个 tutorial 目录,其中包含以下内容

tutorial/scrapy.cfg            # deploy configuration filetutorial/             # project's Python module, you'll import your code from here__init__.pyitems.py          # project items definition filemiddlewares.py    # project middlewares filepipelines.py      # project pipelines filesettings.py       # project settings filespiders/          # a directory where you'll later put your spiders__init__.py

2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件

这里保存为quotes_spider.py

from pathlib import Pathimport scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"def start_requests(self):urls = ["https://quotes.toscrape.com/page/1/","https://quotes.toscrape.com/page/2/",]for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):page = response.url.split("/")[-2]filename = f"quotes-{page}.html"Path(filename).write_bytes(response.body)self.log(f"Saved file {filename}")

其中

    def start_requests(self):urls = ["https://quotes.toscrape.com/page/1/","https://quotes.toscrape.com/page/2/",]for url in urls:yield scrapy.Request(url=url, callback=self.parse)# 可以替换为# 不要实现 start_requests() 方法,该方法从 URL 生成 scrapy.Request 对象,您只需定义一个 start_urls 类属性,其中包含 URL 列表。然后,start_requests() 的默认实现将使用此列表为您的 spider 创建初始请求。# 这是因为 parse() 是 Scrapy 的默认回调方法,它针对未明确分配回调的请求调用。start_urls = {"https://quotes.toscrape.com/page/1/","https://quotes.toscrape.com/page/2/",}

3.运行爬虫

在该项目顶级目录下输入一下命令(在tutorial下):

scrapy crawl quotes

这里的quotes必须跟 quotes_spider.py中的name属性保持一致

现在,检查当前目录中的文件,可以发现创建了两个新文件:quotes-1.html 和 quotes-2.html,其中包含各个 URL 的内容,与代码文件中的parse函数的指示一致。

过程为:
Scrapy 调度 scrapy.Request 对象,由 Spider 的 start_requests 方法返回。在收到每个对象的响应后,它实例化 Response 对象并调用与请求关联的回调方法(在本例中,是 parse 方法),将响应作为参数传递。

4.利用css选择器+Scrapy Shell提取数据

注意:在 Windows 上,要使用双引号将参数URL括起来

例如:

在shell命令中输入一下命令

scrapy shell "https://quotes.toscrape.com/page/1/"

运行结果如下:
1.png

例如:

response.css("title")
[<Selector query='descendant-or-self::title' data='<title>Quotes to Scrape</title>'>]response.css("title::text").getall()
['Quotes to Scrape']response.css("title").getall()
['<title>Quotes to Scrape</title>'] response.css("title::text").get()
'Quotes to Scrape'response.css("title::text").re(r"Quotes.*")
['Quotes to Scrape']response.css("title::text").re(r"Q\w+")
['Quotes']response.css("title::text").re(r"(\w+) to (\w+)")
['Quotes', 'Scrape']

官方文档见:https://docs.scrapy.net.cn/en/latest/


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

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

相关文章

glsl着色器学习(十)缩放

对二维图形进行缩放&#xff0c;需要用到顶点着色器&#xff0c;顶点着色器经过矩阵变换&#xff0c;会将模型空间最终转换成裁剪空间。下面就来操作矩阵 这里需要用到一个库glMatrix。 首先修改顶点着色器 <script id"vertex-shader-2d" type"x-shader/x-…

Win32创建虚拟打印机

最近有个需求需要对报告打印进行统一的管理&#xff0c;最终实现方案如下&#xff1a; 1、安装Microsoft Print To PDF虚拟打印机&#xff0c;该打印机可以将所有打印数据转换为PDF 2、通过Microsoft Print To PDF虚拟机参数复制一台新的虚拟打印机 3、创建打印输出端口&…

服务器数据恢复—LeftHand存储中raid5阵列多块磁盘离线的数据恢复案例

LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列&#xff0c;同时还支持卷快照&#xff0c;卷动态扩容等。下面简单聊一下LeftHand存储的结构和一个LeftHand p4500存储中磁盘阵列数据恢复案例。 服务端&#xff1a; 客户端&#xff1a; LeftHand存储结构&#xff1a; Lefthand存…

C语言指针详解-包过系列(一)目录版

C语言指针详解-包过系列&#xff08;一&#xff09;目录版 1.内存和地址1.1内存1.2 深入理解编址 2.指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;2.2 指针变量和解引用操作符&#xff08;*&#xff09;2.2.1 指针变量2.2.2 指针变量各部分理解2.2.3 解引用操作…

Oracle 常用函数大全

文章目录 一、空校验1. NVL 空校验2. COALESCE 空校验 二、排序1. ORDER BY 排序2. ORDER BY DECODE 指定值排序 三、排名1. RANK 排名2. DENSE RANK 密集排名 四、限制条数1. ROWNUM 限制2. FETCH 限制 五、字符串处理1. TO_CHAR 字符串转换2. || 字符串拼接3. CONCAT 字符串拼…

【Qt】颜色对话框QColorDialog

颜色对话框QColorDialog 颜⾊对话框的功能是允许⽤⼾选择颜⾊。继承⾃ QDialog 类。 Qt QColorDialog 的功能就是内置了调色板&#xff0c;效果和上图画图板的调色板类似。 常用方法介绍&#xff1a; QColorDialog (QWidget *parent nullptr) //创建对象的同时设置⽗对象Q…

获取navicat已保存数据库连接的密码

打开connections.ncx&#xff0c;可以看到Passwordxxx,这是加密后的密码 解密 在线的运行工具https://tool.lu/coderunner 运行如下代码&#xff0c;代码中的密码改成你的密码&#xff0c;在倒数第二行位置 <?phpnamespace FatSmallTools;class NavicatPassword{protected…

draw.io图片保存路径如何设置

当在draw.io中画图时&#xff0c;对于图片的保存经常选择了但是后面打开了又不知道图片的位置在哪&#xff0c;如下图所示&#xff0c;选择的途径很多。 为了之后存储文件较为简单&#xff0c;今天小编从源头设置图片的存储位置&#xff0c;使用浏览器设置的保存文件的路径。 …

2024年9月4日嵌入式学习

内存泄漏&#xff1a; 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中已动态分配的内存由于某种原因程序未释放或无法释放&#xff0c;导致系统内存的浪费&#xff0c;严重时会导致程序运行缓慢甚至崩溃。这种情况在长时间运行的程序或大型系统中尤为常见&#xff0c;…

A02、Java编程性能调优(02)

1、Stream如何提高遍历集合效率 1.1、什么是Stream 现在很多大数据量系统中都存在分表分库的情况。例如&#xff0c;电商系统中的订单表&#xff0c;常常使用用户 ID 的 Hash 值来实现分表分库&#xff0c;这样是为了减少单个表的数据量&#xff0c;优化用户查询订单的速度。 …

2024.9.3 作业

自己实现栈和队列 代码&#xff1a; /*******************************************/ 文件名&#xff1a;sq.h /*******************************************/ #ifndef SQ_H #define SQ_H #include <iostream> #include<cstring>using namespace std; class …

Matlab R2022b使用Camera Calibrator工具箱张正友标定法进行相机标定附带标定前后对比代码

打开Camera Calibrator 在这添加你拍摄的图片 根据你每个方块的实际边长填写&#xff0c;我是15mm。 通俗一点&#xff0c;要k3就选3 Coefficients&#xff0c;否则为0&#xff1b;要p1、p2就选Tangential Distortion。然后进行计算。 可以点击右侧误差高的选中图像进行移…

【C/C++】C语言实现蛇形矩阵

目录 题目描述输入描述:输出描述:示例思路代码 题目描述 给你一个整数n&#xff0c;输出n∗n的蛇形矩阵。 输入描述: 输入一行&#xff0c;包含一个整数n 输出描述: 输出n行&#xff0c;每行包含n个正整数&#xff0c;通过空格分隔。 1<n<1000 示例 输入 4输出 …

iOS18 beta版本怎么回退至iOS17正式版本?

截止目前&#xff0c;苹果最近的iOS18的beta测试版本已经发了8版了&#xff0c;有许多朋友们都已升级提前尝鲜了&#xff0c;升级体验后许多果粉朋友们觉得有许多功能还是不够稳定&#xff0c;有些许bug&#xff0c;就想要降级&#xff0c;回退到iOS17的正式版&#xff0c;但又…

2024数博会技术成果回顾 | KPaaS助力企业数智化转型

2024年8月28日至30日&#xff0c;中国国际大数据产业博览会&#xff08;简称“数博会”&#xff09;在贵州省贵阳市隆重举行。本届数博会以“数智共生&#xff1a;开创数字经济高质量发展新未来”为主题&#xff0c;吸引了来自全球各地的400多家企业和2.1万余名嘉宾参与&#x…

AI自动生成PPT哪个软件好?如何自动生成专业级PPT?

新学期伊始&#xff0c;准备开学演讲稿的你是否还在为制作PPT而烦恼&#xff1f;别担心&#xff0c;现在有了AI的帮助&#xff0c;生成专业且吸引人的PPT变得轻而易举。 本文将为你揭秘4种高效的AI自动生成PPT的方法&#xff0c;让你在新学期的演讲中脱颖而出。无论是简洁明了…

Python | Leetcode Python题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; class Solution:def isRectangleCover(self, rectangles: List[List[int]]) -> bool:area, minX, minY, maxX, maxY 0, rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]cnt defaultdict(int)for rect in rec…

glsl着色器学习 (十二)平移

平移和旋转、缩放是一样的&#xff0c;替换成平移矩阵即可&#xff1b; // 创建一个单位矩阵 const translateYMatrix mat4.create();// 沿着Y轴向下平移1个单位 mat4.fromTranslation(translateYMatrix, [0, -1, 0]);// 设置矩阵 gl.uniformMatrix4fv(matrixUniformLocation…

Linux进程状态 僵尸进程 孤儿进程

进程状态 R (running) Linux 的运行状态(循环空语句) S (sleeping) 阻塞状态 称为浅度睡眠(可以被唤醒)死循环打印语句时等待输入时使用 sleep 函数时 D (disk sleep) 也是一种阻塞状态&#xff0c;称为深度睡眠进程在等待磁盘写入完毕期间&#xff0c;这个进程不能被任何人杀…

2157. 优秀的拆分(power)

代码 #include<bits/stdc.h> using namespace std; int a[10001]; int main() {int n,t1,k0;bool flagfalse;cin>>n;if(n%21) {cout<<-1;return 0;}while(n>0){if(n%21){k;a[k]t; }nn/2;tt*2;}if(k>1) {flagtrue;for(int ik;i>1;i--)cout<&l…