Python 如何在废管道中实现计数器?

Python 如何在废管道中实现计数器?,python,scrapy,Python,Scrapy,管道。py class DotabuffPipeline(object): def open_spider(self, spider): self.match_dict = {} def process_item(self, item, spider): ID = item['matchID'] if ID in self.match_dict: self.match_dict[ID] = self.match_dict[ID] + 1

管道。py

class DotabuffPipeline(object):

def open_spider(self, spider):
    self.match_dict = {}

def process_item(self, item, spider):
    ID = item['matchID']
    if ID in self.match_dict:
        self.match_dict[ID] =  self.match_dict[ID] + 1
        if self.match_dict[ID]==5:
            return item
    else:
        self.match_dict[ID] = 1
from scrapy.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.linkextractors import LinkExtractor
import json
from dotabuff.items import DotabuffItem

class DotaSpider(CrawlSpider):

    name = "dotaspider"
    allow_domains = ['www.dotabuff.com']
    start_urls = []
    with open('spiders/Steam.json','r') as f:
        steam_data = json.load(f)
        f.close
    steam_members = steam_data['members']
    for member in steam_members:
        url = 'http://www.dotabuff.com/players/%s/matches?page=1' %str(member-76561197960265728)
        start_urls.append(url)

    rules = (Rule(LinkExtractor(allow=(r'http://www.dotabuff.com/players/\d+/matches\?page=\d+')), callback="parse_item", follow= True),)

    def parse_item(self, response):
        sel = Selector(response)
        matches = sel.xpath('//td[@class="cell-large"]/a/@href').extract()
        for match in matches:
            item = DotabuffItem()
            match = match.split('/')[-1]
            item['matchID'] = match
            yield item
firstspider.py

class DotabuffPipeline(object):

def open_spider(self, spider):
    self.match_dict = {}

def process_item(self, item, spider):
    ID = item['matchID']
    if ID in self.match_dict:
        self.match_dict[ID] =  self.match_dict[ID] + 1
        if self.match_dict[ID]==5:
            return item
    else:
        self.match_dict[ID] = 1
from scrapy.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.linkextractors import LinkExtractor
import json
from dotabuff.items import DotabuffItem

class DotaSpider(CrawlSpider):

    name = "dotaspider"
    allow_domains = ['www.dotabuff.com']
    start_urls = []
    with open('spiders/Steam.json','r') as f:
        steam_data = json.load(f)
        f.close
    steam_members = steam_data['members']
    for member in steam_members:
        url = 'http://www.dotabuff.com/players/%s/matches?page=1' %str(member-76561197960265728)
        start_urls.append(url)

    rules = (Rule(LinkExtractor(allow=(r'http://www.dotabuff.com/players/\d+/matches\?page=\d+')), callback="parse_item", follow= True),)

    def parse_item(self, response):
        sel = Selector(response)
        matches = sel.xpath('//td[@class="cell-large"]/a/@href').extract()
        for match in matches:
            item = DotabuffItem()
            match = match.split('/')[-1]
            item['matchID'] = match
            yield item
我从www.dotabuff.com上抓取了一些匹配号,我在json中有五个steam id。我想知道我们五个人一起打了几场比赛。所以我定义了一个dict作为计数器来计算出现的次数,但它不起作用

Traceback (most recent call last):
  File "e:\anaconda2\lib\site-packages\twisted\internet\defer.py", line 150, in
maybeDeferred
    result = f(*args, **kw)
  File "e:\anaconda2\lib\site-packages\scrapy\xlib\pydispatch\robustapply.py", l
ine 57, in robustApply
    return receiver(*arguments, **named)
  File "e:\anaconda2\lib\site-packages\scrapy\extensions\feedexport.py", line 19
3, in item_scraped
    slot.exporter.export_item(item)
  File "e:\anaconda2\lib\site-packages\scrapy\exporters.py", line 111, in export
_item
    itemdict = dict(self._get_serialized_fields(item))
  File "e:\anaconda2\lib\site-packages\scrapy\exporters.py", line 63, in _get_se
rialized_fields
    field_iter = six.iterkeys(item)
  File "e:\anaconda2\lib\site-packages\six.py", line 593, in iterkeys
    return d.iterkeys(**kw)
AttributeError: 'NoneType' object has no attribute 'iterkeys'

它说,在查看文件时,管道是用scrapy表示的

每个项目管道组件都会调用此方法,并且必须 返回包含数据、项(或任何子类)对象的dict 或者引发DropItem异常


您的process\u item方法不遵守此规则,并且可以返回
None
,这是不合适的。

您是否查看了
集合中的
计数器