Scrapy入门———Scrapy1.6官方教程学习笔记

本文档是Scrapy1.6官方教程的学习笔记,详细介绍了如何创建Scrapy项目,编写第一个Spider以及如何运行Spider。教程中通过爬取quotes.toscrape.com网站的名人名言作为示例,涵盖了创建Spider的基本步骤,包括start_requests()和parse()方法的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果已经安装好了Scrapy,就可以开始下面的教程了。如果没有,可以看我的博文《安装Scrapy》进行安装后,再回来看哦!

接下来,我们将爬取 quotes.toscrape.com中的名人名言,作为本教程的素材。

入门教程共下列五步:

  1. 创建一个新的Scrapy项目
  2. 写一个spider去爬取网页和提取数据
  3. 使用命令行输出爬取的数据
  4. 根据链接递归爬取(爬取每一个链接)
  5. 使用spider 参数

创建一个Scrapy项目

在开始使用Scrapy之前,需要建立一个新的Scrapy项目。进入一个目录,输入下面命令,新建一个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


第一个Spider

Spiders是你需要定义的类,用它从网站中爬取信息。
Spiders必须是scrapy.Spider的子类和定义初始化的请求,选择如何在页面中跟踪链接,以及如何解析下载的页面内容以提取数据。

下面代码是我们第一次Spider代码。保存文件名为quotes_spider.py,同时保存在tutorial/spiders目录底下在你新建的Spiders项目中。

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"

    def start_requests(self):
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://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 = 'quotes-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)
可以看到Spider的子类scrapy.Spider按定义了一些属性和方法:

  • name:Spider的标识。它在项目中必须是独一无二的,不能为不同的Spider设置相同的名称。
  • start_requests():必须返回一个可迭代的请求(您可以返回一个请求列表或编写一个生成器函数),而这将使爬虫开始爬行。后续请求将从这些初始请求依次生成。
  • parse():将调用一个方法来处理每个请求所下载的响应。响应参数是一个包含页面内容的TextResponse实例,并有进一步的帮助方法来处理它。parse()方法通常解析响应,将剪贴数据提取为dicts,并寻找新的url来跟踪和创建来自它们的新请求(请求)。

怎么运行spider

想要spider工作,先回到项目的顶级目录,然后运行:
scrapy crawl quotes
使用这个命令是运行刚刚添加的name为quotes的爬虫,这将发送一些请求。您将得到一个与此类似的输出:
... (omitted for brevity)
2016-12-16 21:24:05 [scrapy.core.engine] INFO: Spider opened
2016-12-16 21:24:05 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-12-16 21:24:05 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (404) <GET http://quotes.toscrape.com/robots.txt> (referer: None)
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/1/> (referer: None)
2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://quotes.toscrape.com/page/2/> (referer: None)
2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-1.html
2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-2.html
2016-12-16 21:24:05 [scrapy.core.engine] INFO: Closing spider (finished)
...
现在,检查当前目录中的文件。您应该注意到已经创建了两个新文件:quotes-1.html和quotes-2.html,包含了各自的url的内容,这是parse方法所产出的。

小提示:如果您想知道为什么我们还没有解析HTML,请稍候,我们很快就会讲到。

待续


参考Scrapy1.5官方文档:https://docs.scrapy.org/en/latest/intro/tutorial.html#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值