Scrapy入门学习

news2024/11/15 6:36:42

文章目录

  • 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 file

    tutorial/             # project's Python module, you'll import your code from here
        __init__.py

        items.py          # project items definition file

        middlewares.py    # project middlewares file

        pipelines.py      # project pipelines file

        settings.py       # project settings file

        spiders/          # a directory where you'll later put your spiders
            __init__.py

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

这里保存为quotes_spider.py

from pathlib import Path

import scrapy


class 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.coloradmin.cn/o/2082668.html

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

相关文章

2024谷歌开发者大会分享

前言&#xff1a; google一般会在每年的5月份在美国举行开发者大会&#xff0c;然后8-9月份会在中国也举办一次开发者大会&#xff0c;内容主题纲要是一致的&#xff0c;但是由于中国剧本的时间稍微晚一些&#xff0c;所以其内容会更新一些。 每年的开发者大会&#xff0c;会隐…

跟着B站前端面试总结回顾前端基础知识(二)

深拷贝与浅拷贝 在JavaScript中&#xff0c;深拷贝是一个常见的需求&#xff0c;特别是在处理复杂数据结构&#xff08;如对象、数组等&#xff09;时&#xff0c;需要确保原始数据不被修改。下面通过表格形式列出几种常见的深拷贝方法&#xff0c;并简要说明其优缺点。 方法…

【AI模型:追求全能还是专精?】

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 ​编辑 一&#xff1a;AI模型的全面评估和比较 二&#xff1a;AI模型的专精化和可扩展性…

宝塔安装yasd 远程调试 swoole

一、服务器安装yasd 1.安装yasd 按照官方文档&#xff0c;Yasd调试器官方文档 yum install boost boost-develgit clone https://github.com/swoole/yasd.gitcd yasdphpize --clean && phpize && ./configure --with-php-config/www/server/php/74/bin/php…

筛质数(线性筛法)

线性筛法&#xff1a; 假设有一个非质数 x&#xff0c;那么这个数可以被表示为一个最小质因数和一个因子相乘的形式 如 x 12 &#xff0c;那么 x 2*6 其中&#xff1a;2 就是 12 的最小质因数&#xff0c; 6 就是另一个因子 线性筛法就是利用每个数的最小质因数筛掉这个非…

做谷歌seo花钱多吗?

一分钱一分货&#xff0c;哪怕你是自己一个人做谷歌seo&#xff0c;服务器&#xff0c;域名的成本也是成本&#xff0c;当然&#xff0c;花费可能还少&#xff0c;但其中的时间精力&#xff0c;以及有没有效果&#xff0c;你大可自己掂量一下 你如果只是想随便做做&#xff0c;…

SSM框架之Mybatis框架

前言 什么是框架&#xff1f; 框架就是对技术的封装&#xff0c;将基础的技术进行封装&#xff0c;便于程序员使用&#xff0c;提高开发效率 ssm框架是什么&#xff1f; ssm包括spring、springMvc、Mybatis&#xff0c;是后端企业级开发时会使用到的框架组合&#xff0c;在…

python实战一:合并多个Excel中数据

看不懂可以跟着视频学一下&#xff0c;关于基础课程项目也可以私聊我&#xff01; 视频源码&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/2055653f735b 之前我们已经学习了如何读取和写入Execl数据&#xff0c;今天我们来用一个实例来进行表格的合并。如下是 2021年…

离散数学中的逻辑基础(1)

目录 引言 1. 命题及其逻辑运算 2. 逻辑等价与范式 3. 逻辑推理规则 4. 逻辑问题练习 5. 总结 引言 逻辑是离散数学的核心概念之一&#xff0c;它用于精确描述数学命题并分析其关系。逻辑不仅是数学证明的基础&#xff0c;也是计算机科学中算法设计和编程的基石。本篇文…

【STM32】STM介绍

一、嵌入式与STM32 1.嵌入式 除了桌面PC之外&#xff0c;所有的控制类设备&#xff0c;都称之嵌入式。 1 ARM概述 1.1 历史 1978年&#xff0c;物理学家赫尔曼豪泽&#xff08;Hermann Hauser&#xff09;和工程师Chris Curry&#xff0c;在英国剑桥创办了CPU公司&#xff…

识别不到开发板串口问题(故事版)

最近电脑重新刷机了&#xff0c;很多东西都没了&#xff0c;很伤心。但也是锻炼自己基本功的能力。 我在用vscode开发ESP32的时候&#xff0c;发现一直识别不到串口&#xff0c;很纳闷&#xff0c;以为笔记本端口坏了&#xff1f; 转念一想觉得是因为没有加驱动 当时下面有一…

大模型学习应用 3: AutoDL 平台 transformers 环境搭建及模型部署使用(持续更新中)

之前我们学习了在和鲸的预配置好的平台上进行学习&#xff0c;在工作中并不现实&#xff0c;本期我们的目标是将已有模型部署到云端进行运行 配置环境&#xff1a;RTX 4090D(24GB) python 3.12(ubuntu22.04) 参考文章:AutoDL平台transformers环境搭建 目录 注册及选择算力新建…

E6000物联网主机:打造智慧楼宇的未来

智慧楼宇&#xff0c;作为现代建筑领域的璀璨明星&#xff0c;正以其独特的魅力和强大的功能改变着我们的生活和工作方式。它并非简单的建筑与技术的叠加&#xff0c;而是通过先进的信息技术和智能化系统的深度融合&#xff0c;实现对建筑内各项设施和服务的高效管理与优化。 智…

Mac怎么安装谷歌浏览器

谷歌浏览器凭借其强大的功能&#xff0c;成为广大用户的首选浏览器。其中Mac用户在进行下载和安装时&#xff0c;可能会出现一些困难。为了帮助大家顺利的在Mac系统中成功安装&#xff0c;下面就给大家详细分享Mac安装谷歌浏览器指南&#xff0c;希望对你有所帮助。 Mac安装谷歌…

xss-labs通关攻略 16-20关

第16关 ?keyword<img%0asrc"1.jpg"%0aοnerrοralert(1)> 第17关 查看源代码 输入 ?arg01a&arg02 οnmοuseοveralert("aini") 第18关 直接输入 ?arg01a&arg02 οnmοuseοveralert("aini") 第19关 需要下载一个flash 输…

国内纵向科研项目梳理

文章目录 1. 2023 年以后2. 2023 年以前2.1 国家重点研发计划2.1.1 重点专项 2.2 国家科技重大专项 3. 附&#xff1a;国家级和省部级科研项目列表 1. 2023 年以后 2023 年&#xff0c;根据新的国务院机构改革方案&#xff0c;科技部现有的多项管理职责和多个下属机构都将被分…

6款自动生成文章的软件,生成文章好用、操作简单

作为一名专业创作者&#xff0c;我深知内容生产的压力和挑战。在追求效率的同时&#xff0c;保持文章的质量和原创性是至关重要的。最近&#xff0c;我亲测了6款自动生成文章的软件&#xff0c;发现它们不仅操作简便&#xff0c;而且生成的文章质量令人满意。以下是我对这6款软…

ctfhub-web-SSRF(FastCGI协议-DNS重绑定 Bypass)

less-6 FastCGI协议 步骤一&#xff1a;开启环境&#xff0c;查看提示 步骤二&#xff1a;对一句话木马进行base64编码&#xff1a;<?php eval($_POST[cmd]);?> echo "PD9waHAgQGV2YWwoJF9QT1NUW2NtZF0pOz8" | base64 -d > 1.php 步骤三&#xff1a;利…

#C++ 笔记一

重点&#xff1a;面试考试大概率会涉及&#xff0c;需要不借助任何资料掌握。 掌握&#xff1a;面试考试可能涉及&#xff0c;需要不借助任何资料掌握 熟悉&#xff1a;面试考试可能涉及&#xff0c;可以稍微参考资料掌握 了解&#xff1a;面试考试小概率涉及&#xff0c;能吹吹…

获取文件属性/库Lib

获取文件属性 stat 函数 man 2 stat #include <sys/types.h> #include <sys/stat.h> #include <unistd.h>int stat(const char *path, struct stat *buf); 功能&#xff1a;获取文件属性 参数&#xff1a; path&#xff1a;文件路径名buf&#xff1a;保存文…