Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Scrapy机器人中,如何从一个函数内部调用另一个函数?_Python_Python 2.7_Web Scraping_Scrapy - Fatal编程技术网

Python 在Scrapy机器人中,如何从一个函数内部调用另一个函数?

Python 在Scrapy机器人中,如何从一个函数内部调用另一个函数?,python,python-2.7,web-scraping,scrapy,Python,Python 2.7,Web Scraping,Scrapy,我知道这是一个新手问题,也是一个基本的Python问题,但它是在Scrapy的上下文中,我在任何地方都找不到答案 当我运行此bot代码时: import scrapy from tutorial.items import DmozItem class DmozSpider(scrapy.Spider): name = "dmoz" allowed_domains = ["lib-web.org"] start_urls = [ "http://www.

我知道这是一个新手问题,也是一个基本的Python问题,但它是在Scrapy的上下文中,我在任何地方都找不到答案

当我运行此bot代码时:

import scrapy

from tutorial.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["lib-web.org"]
    start_urls = [
        "http://www.lib-web.org/united-states/public-libraries/michigan/"
    ]

    count = 0

    def increment(self):
        global count
        count += 1

    def getCount(self):
        global count
        return count

    def parse(self, response):
        increment()
        for sel in response.xpath('//div/div/div/ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('p/text()').extract()
            x = getCount()
            print x
            yield item
DMOZ项目:

import scrapy

class DmozItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()
我得到这个错误:

File "/Users/Admin/scpy_projs/tutorial/tutorial/spiders/dmoz_spider.py", line 23, in parse
    increment()
NameError: global name 'increment' is not defined
为什么我不能从
parse(self,response)
中调用
increment()
?我怎样才能做到这一点

感谢您的帮助。

increment()
是spider的一个实例方法-使用
self.increment()
调用它

此外,不需要使用globals-define
count()
作为实例变量

固定版本:

import scrapy

from tutorial.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["lib-web.org"]
    start_urls = [
        "http://www.lib-web.org/united-states/public-libraries/michigan/"
    ]

    def __init__(self,  *args, **kwargs):
        super(DmozSpider, self).__init__(*args, **kwargs)

        self.count = 0

    def increment(self):
        self.count += 1

    def getCount(self):
        return self.count

    def parse(self, response):
        self.increment()

        for sel in response.xpath('//div/div/div/ul/li'):
            item = DmozItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            item['desc'] = sel.xpath('p/text()').extract()
            x = self.getCount()
            print x

            yield item
你也可以

我要读一下init和self。谢谢你的指导。这是我需要的。