📜  如何使用Python Scrapy 跟踪链接?(1)

📅  最后修改于: 2023-12-03 15:24:00.439000             🧑  作者: Mango

如何使用Python Scrapy 跟踪链接?

如果你需要在网站上爬取数据时进行导航,并跟踪链接以访问更多页面并获取更多数据,那么 Scrapy 是一个非常好的 web 爬虫框架。Scrapy 有一个强大的链接管理器,它可以自动跟踪 URL,让你的爬虫访问更多页面,从而抓取更多数据。

本文将向您介绍如何使用 Scrapy 跟踪链接以访问不同的页面。

创建新的 Scrapy 项目

首先,我们需要创建一个新的 Scrapy 项目。在命令行中输入以下命令:

scrapy startproject myproject
cd myproject

这将创建一个名为 myproject 的新 Scrapy 项目,并将您带回到其根目录。

创建一个新的 Scrapy Spider

接下来,我们需要为我们的项目创建一个新的 Spider。在命令行中输入以下命令:

scrapy genspider example example.com

这将创建一个名为 example 的新 Spider,并将默认在 https://www.example.com 上进行爬取。当然,这不是我们要爬取的实际网站,所以我们需要修改这个网址。

修改起始网址

打开 myproject/spiders/example.py 文件,并替换 start_urls 列表中的 https://www.example.com

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://www.example.com']

    def parse(self, response):
        pass

start_urls列表中的网址替换为我们要爬取的实际网站的网址。

编写 Scrapy Spider 跟踪链接

现在,我们已经为我们的 Scrapy 项目创建了一个新的 Spider。我们将学习如何编写一个 Scrapy Spider,以使用 Scrapy 的链接管理器跟踪 URL 以访问不同的页面。

在 Scrapy 中,我们将访问过的 URL 存储在一个特殊的数据结构中,称为 “Visited Set”。 Scrapy 还提供了一个链接提取器,可以从页面中提取所有链接,我们可以通过将这些链接添加到Scrapy中的队列中,来自动跟踪链接并访问更多页面。

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://www.example.com']

    def parse(self, response):
        # Extract all the links from the page
        links = response.css("a::attr(href)").extract()

        # Follow the links
        for link in links:
           yield response.follow(link, callback=self.parse)

在上面的代码中,我们使用 css 选择器从响应对象中提取所有链接。我们创建了一个循环,对每个链接使用 response.follow(link, callback=self.parse) 调用来自动跟踪链接。

为了避免陷入循环中,我们还需要限制我们跟踪的链接数量。Scrapy 提供 depth_limit 设置来控制最多跟踪多少链接。我们可以在项目设置中进行全局设置,也可以在每个 Spider 独立设置。

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://www.example.com']
    custom_settings = {
        'DEPTH_LIMIT': 1
    }

    def parse(self, response):
        # Extract all the links from the page
        links = response.css("a::attr(href)").extract()

        # Follow the links
        for link in links:
           yield response.follow(link, callback=self.parse)

在上面的代码中,我们将 DEPTH_LIMIT 设置为 1,表示跟踪一个链接深度,即将链接从起始页面中提取,然后访问每个链接中提取的页面。如果我们将 DEPTH_LIMIT 设置为 2,则可以访问链接中的链接。

结论

使用 Scrapy 的链接管理器自动跟踪 URL 是一种轻松获取数据的方法。在本文中,我们介绍了如何创建新的 Scrapy 项目、如何创建新的 Scrapy Spider,以及如何编写 Scrapy Spider,以自动跟踪 URL 并访问不同的页面。

Markdown原文:

如何使用Python Scrapy 跟踪链接?

如果你需要在网站上爬取数据时进行导航,并跟踪链接以访问更多页面并获取更多数据,那么 Scrapy 是一个非常好的 web 爬虫框架。Scrapy 有一个强大的链接管理器,它可以自动跟踪 URL,让你的爬虫访问更多页面,从而抓取更多数据。

本文将向您介绍如何使用 Scrapy 跟踪链接以访问不同的页面。

创建新的 Scrapy 项目

首先,我们需要创建一个新的 Scrapy 项目。在命令行中输入以下命令:

scrapy startproject myproject
cd myproject

这将创建一个名为 myproject 的新 Scrapy 项目,并将您带回到其根目录。

创建一个新的 Scrapy Spider

接下来,我们需要为我们的项目创建一个新的 Spider。在命令行中输入以下命令:

scrapy genspider example example.com

这将创建一个名为 example 的新 Spider,并将默认在 https://www.example.com 上进行爬取。当然,这不是我们要爬取的实际网站,所以我们需要修改这个网址。

修改起始网址

打开 myproject/spiders/example.py 文件,并替换 start_urls 列表中的 https://www.example.com

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://www.example.com']

    def parse(self, response):
        pass

start_urls列表中的网址替换为我们要爬取的实际网站的网址。

编写 Scrapy Spider 跟踪链接

现在,我们已经为我们的 Scrapy 项目创建了一个新的 Spider。我们将学习如何编写一个 Scrapy Spider,以使用 Scrapy 的链接管理器跟踪 URL 以访问不同的页面。

在 Scrapy 中,我们将访问过的 URL 存储在一个特殊的数据结构中,称为 “Visited Set”。 Scrapy 还提供了一个链接提取器,可以从页面中提取所有链接,我们可以通过将这些链接添加到Scrapy中的队列中,来自动跟踪链接并访问更多页面。

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://www.example.com']

    def parse(self, response):
        # Extract all the links from the page
        links = response.css("a::attr(href)").extract()

        # Follow the links
        for link in links:
           yield response.follow(link, callback=self.parse)

在上面的代码中,我们使用 css 选择器从响应对象中提取所有链接。我们创建了一个循环,对每个链接使用 response.follow(link, callback=self.parse) 调用来自动跟踪链接。

为了避免陷入循环中,我们还需要限制我们跟踪的链接数量。Scrapy 提供 depth_limit 设置来控制最多跟踪多少链接。我们可以在项目设置中进行全局设置,也可以在每个 Spider 独立设置。

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://www.example.com']
    custom_settings = {
        'DEPTH_LIMIT': 1
    }

    def parse(self, response):
        # Extract all the links from the page
        links = response.css("a::attr(href)").extract()

        # Follow the links
        for link in links:
           yield response.follow(link, callback=self.parse)

在上面的代码中,我们将 DEPTH_LIMIT 设置为 1,表示跟踪一个链接深度,即将链接从起始页面中提取,然后访问每个链接中提取的页面。如果我们将 DEPTH_LIMIT 设置为 2,则可以访问链接中的链接。

结论

使用 Scrapy 的链接管理器自动跟踪 URL 是一种轻松获取数据的方法。在本文中,我们介绍了如何创建新的 Scrapy 项目、如何创建新的 Scrapy Spider,以及如何编写 Scrapy Spider,以自动跟踪 URL 并访问不同的页面。