原文:https://www.osgeo.cn/scrapy/intro/tutorial.html

在本教程中,我们假定scrapy已经安装在您的系统上。如果不是这样的话,看 安装指南 .

我们将抓取' quotes.toscrape.com <http: quotes.toscrape.com=""></http:> ' _,这是一个列出著名作家名言的网站。

本教程将指导您完成以下任务:

  1. 创建新的Scrapy项目

  2. 写一篇 spider 对网站进行爬网并提取数据

  3. 使用命令行导出抓取的数据

  4. 将spider改为递归跟踪链接

  5. 使用蜘蛛参数

Scrapy是用 Python 写的。如果你对这门语言不熟悉,你可能想从了解这门语言是什么开始,从 Scrapy 语言中得到最大的收获。

如果您已经熟悉其他语言,并且希望快速学习Python,那么 Python Tutorial 是一种很好的资源。

如果您是编程新手,并且想从python开始,那么下面的书可能对您有用:

你也可以看看 this list of Python resources for non-programmers 以及 suggested resources in the learnpython-subreddit .

创建项目

在开始抓取之前,你必须建立一个新的零碎项目。输入要在其中存储代码并运行的目录:

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

我们的第一只蜘蛛

爬行器是您定义的类,Scrapy使用它从一个网站(或一组网站)中抓取信息。它们必须是子类 Spider 并定义要做出的初始请求,可选的是如何跟随页面中的链接,以及如何解析下载的页面内容以提取数据。

这是我们第一只蜘蛛的代码。将其保存在名为的文件中 quotes_spider.py 下 tutorial/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 = f'quotes-{page}.html'
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log(f'Saved file {filename}')

如您所见,我们的Spider子类 scrapy.Spider 并定义了一些属性和方法:

  • name :标识蜘蛛。它在一个项目中必须是唯一的,即不能为不同的爬行器设置相同的名称。

  • start_requests() :必须返回请求的可迭代(您可以返回请求列表或编写生成器函数),爬行器将从该请求开始爬行。后续请求将从这些初始请求中相继生成。

  • parse() :将被调用以处理为每个请求下载的响应的方法。Response参数是 TextResponse 它保存页面内容,并具有进一步有用的方法来处理它。

    这个 parse() 方法通常解析响应,将抓取的数据提取为字典,还查找要遵循的新URL并创建新请求 (Request )。

如何运行我们的蜘蛛

要使蜘蛛正常工作,请转到项目的顶级目录并运行:

scrapy crawl quotes

此命令运行名为的spider quotes 我们刚刚添加的,这将发送一些 quotes.toscrape.com 领域。您将得到类似于以下内容的输出:

... (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.

相关文章:

  • 2022-01-15
  • 2021-11-12
  • 2021-12-05
  • 2021-11-23
  • 2022-01-18
  • 2022-03-05
猜你喜欢
  • 2021-09-28
  • 2021-12-23
  • 2022-12-23
  • 2021-11-23
  • 2021-11-23
  • 2021-08-09
  • 2021-10-16
相关资源
相似解决方案