Scrapy入门学习

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/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值