これは私が今朝の別の質問をしたのと同じコードを含んでいます。Scrapyが設定されたリストは実際に返される前に返されます
class LbcSubtopicSpider(scrapy.Spider):
...irrelevant/sensitive code...
rawTranscripts = []
rawTranslations = []
def parse(self, response):
rawTitles = []
rawVideos = []
for sel in response.xpath('//ul[1]'): #only scrape the first list
...irrelevant code...
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 "translations:"
print self.rawTranslations
def parse_translation(self, response):
for sel in response.xpath('//p[not(@class)]'):
rawTranslation = sel.xpath('text()').extract()
rawTranslation = ''.join(rawTranslation)
#print rawTranslation
self.rawTranslations.append(rawTranslation)
#print self.rawTranslations
私の問題はparse(...)
法における「印刷self.rawTranslationsが」"[]"
以上のものを印刷していないということです。これは2つのうちの1つを意味する可能性があります。つまり、印刷直前にリストをリセットしている可能性があります。parse_translation(...)
への呼び出しが完了してから、parse(...)
のリンクのリストが読み込まれます。クラスボディの"rawTranslations = []"
が複数回実行されない限り、リストをリセットするコードが見つからないため、後者の疑いがあります。
parse_translation(...)
の同じ行のコメントを外すと、適切なテキストが出力されます。つまり、テキストが正しく抽出されており、その問題はメインのparse(...)
メソッドに固有のようです。
私が同期の問題だと思っているものを解決しようとする試みは、まったく目的がありませんでした - 私は見つけることができる多くのGoogleチュートリアルに基づいてRLockオブジェクトを使用しようとしました。結果は同一であった。
私は過去1時間にインターネットを掘り下げて、Pythonのロックをよく理解し、それほど遠くに進まないよう努めてきました。私の頭の中にあるアイデアは、最後のサブページの訪問が完了したらロックを解除することですが、驚くほどシンタックスの例はほとんど見つかりませんでした。 – jah