Python Scrapy CLOSESPIDER_页面计数设置don';I don’我不能如愿工作

Python Scrapy CLOSESPIDER_页面计数设置don';I don’我不能如愿工作,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,我使用scrapy 1.0.3,但无法发现CLOSESPIDER extesnion是如何工作的。 对于命令: scrapy爬网域链接--set=CLOSESPIDER\u PAGECOUNT=1 是正确的一个请求,但对于两页计数: scrapy爬网域链接--设置CLOSESPIDER\u PAGECOUNT=2 是无限的请求 所以请用一个简单的例子来解释它是如何工作的 这是我的蜘蛛代码: class DomainLinksSpider(CrawlSpider): name = "dom

我使用scrapy 1.0.3,但无法发现CLOSESPIDER extesnion是如何工作的。 对于命令: scrapy爬网域链接--set=CLOSESPIDER\u PAGECOUNT=1 是正确的一个请求,但对于两页计数: scrapy爬网域链接--设置CLOSESPIDER\u PAGECOUNT=2 是无限的请求

所以请用一个简单的例子来解释它是如何工作的

这是我的蜘蛛代码:

class DomainLinksSpider(CrawlSpider):
    name = "domain_links"
    #allowed_domains = ["www.example.org"]
    start_urls = [ "www.example.org/",]

    rules = (

        # Extract links matching 'item.php' and parse them with the spider's method parse_item
        Rule(LinkExtractor(allow_domains="www.example.org"), callback='parse_page'),
    )

    def parse_page(self, response):
        print '<<<',response.url
        items = []
        item = PathsSpiderItem()

        selected_links = response.selector.xpath('//a[@href]')

        for link in LinkExtractor(allow_domains="www.example.org", unique=True).extract_links(response):
            item = PathsSpiderItem()
            item['url'] = link.url
            items.append(item)
        return items
但不是无限:

scrapy爬行示例--设置CLOSESPIDER_PAGECOUNT=1 “下载程序/请求计数”:1

scrapy爬行示例--设置CLOSESPIDER_PAGECOUNT=2 “下载程序/请求计数”:17

scrapy爬行示例--设置CLOSESPIDER_PAGECOUNT=3 “下载程序/请求计数”:19

可能是因为平行下降。 是的,对于并发请求=1,CLOSESPIDER\u页面计数设置适用于第二个示例。我会检查第一个-它也工作。
这对我来说几乎是无限的,因为有很多URL(我的项目)的站点地图被抓取为下一个页面:)

CLOSESPIDER\u PAGECOUNT
由扩展控制,它统计每个响应,直到达到它的极限,这时它告诉抓取程序进程开始结束(完成请求并关闭可用的插槽)

现在,当您指定
CLOSESPIDER\u PAGECOUNT=1
时,爬行器结束的原因是,在那一刻(当它得到第一个响应时),没有挂起的请求,它们是在您的第一个请求之后创建的,因此爬行器进程准备结束,而不考虑以下请求(因为他们将在第一胎之后出生)


当您指定
CLOSESPIDER_PAGECOUNT>1
时,您的spider会被捕获创建请求并填充请求队列。当spider知道何时完成时,仍有待处理的请求,这些请求将作为关闭spider的一部分执行。

CLOSESPIDER_PAGECOUNT
由扩展控制,扩展计数每个响应直到达到其极限,即它告诉爬虫进程开始结束(完成请求并关闭可用插槽)

现在,当您指定
CLOSESPIDER\u PAGECOUNT=1
时,爬行器结束的原因是,在那一刻(当它得到第一个响应时),没有挂起的请求,它们是在您的第一个请求之后创建的,因此爬行器进程准备结束,而不考虑以下请求(因为他们会在第一个出生后出生)


当您指定
CLOSESPIDER\u PAGECOUNT>1
时,您的spider将被捕获创建请求并填充请求队列。当spider知道何时完成时,仍有待处理的请求,这些请求将作为关闭spider的一部分执行。

您确定要返回项目,而不是“放弃项目”吗一个接一个?我更喜欢使用BaseSpider,但它看起来像parse_页面被称为无限次,而不是真正产生任何项目?我认为这并不重要。灵感来源:但这个例子当然有点更新。Turo,谢谢你的建议-这是一种很好的内存优化方式。你确定要返回项目,而不是“产生项目”吗一个接一个?我更喜欢使用BaseSpider,但它看起来像parse_页面被称为无限次,而不是真正产生任何项目?我认为这并不重要。灵感来源:但这个例子当然有点更新。Turo,谢谢你的建议-这是一种很好的内存优化方式。这有助于理解closespider_pa本周也是gecount,谢谢这有助于本周理解closespider_pagecount,谢谢
# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class ExampleSpider(CrawlSpider):
    name = 'example'
    allowed_domains = ['karen.pl']
    start_urls = ['http://www.karen.pl']

    rules = (
        # Extract links matching 'category.php' (but not matching 'subsection.php')
        # and follow links from them (since no callback means follow=True by default).


        # Extract links matching 'item.php' and parse them with the spider's method parse_item
    Rule(LinkExtractor(allow_domains="www.karen.pl"), callback='parse_item'),
    )

    def parse_item(self, response):
        self.logger.info('Hi, this is an item page! %s', response.url)
        item = scrapy.Item()

        return item