我知道这个问题看起来和这里的其他问题一模一样,因为我只是把它们都读了一遍,它们都说要做我已经尝试过的事情,但它没有奏效(或者我错过了与我的情况有细微差别)。我的情况是:
我正在用Scrapy和python2.7.11编写一个scraper,我的代码如下(这是一个删除了不相关行的复制粘贴,但我可以根据请求重新添加):
class LbcSubtopicSpider(scrapy.Spider):
...omitted...
rawTranscripts = []
rawTranslations = []
def parse(self, response):
#global rawTranscripts, rawTranslations
rawTitles = []
rawVideos = []
for sel in response.xpath('//ul[1]'): #only scrape the first list
...omitted...
index = 0
for sub in sel.xpath('li/ul/li/a'): #scrape the sublist items
index += 1
if index%2!=0: #odd numbered entries are the transcripts
transcriptLink = sub.xpath('@href').extract()
#url = response.urljoin(transcriptLink[0])
#yield scrapy.Request(url, callback=self.parse_transcript)
else: #even numbered entries are the translations
translationLink = sub.xpath('@href').extract()
url = response.urljoin(translationLink[0])
yield scrapy.Request(url, callback=self.parse_translation)
print rawTitles
print rawVideos
print rawTranslations
def parse_translation(self, response):
global rawTranslations
for sel in response.xpath('//p[not(@class)]'):
rawTranslation = sel.xpath('text()').extract()
rawTranslations.append(rawTranslation)
这将在任何时候返回一个错误“print rawTranslations”或rawTranslations.append调用(rawTranslation)”是因为未定义全局“rawTranslations”。在
正如我之前所说,我已经对这个问题进行了广泛的研究,几乎每个人都在互联网上说,只要在你要使用/修改它的任何函数的开头添加一个“global(name)”行(虽然我从来没有分配给它,所以我甚至不需要这个)。不管我的全局行是否被注释掉,结果都是一样的。这种行为似乎违背了我所读到的关于Python中全局变量如何工作的所有内容,因此我怀疑这可能是一个与如何调用解析函数有关的古怪问题恶心。请求(....). 在
很抱歉,你又看到了一个问题,但这次似乎有点扭曲,希望有人能查到真相。谢谢。在
在您的情况下,您要访问的变量不是全局变量,它在类的范围内。在
如果要写入全局变量,只需要
^{pr2}$global
关键字。提示:不要这样做,因为写出来的全局变量只会带来痛苦和绝望。只将全局变量用作(config)常量。在如果要在类中使用变量,可以使用自我xxx在
相关问题 更多 >
编程相关推荐