私の解析メソッドでは、私が継承したSpiderClassから3つのメソッドを呼びたいと思います。 まず、XPathを解析してからデータを消去し、そのデータをアイテムインスタンスに割り当ててパイプラインに渡したいと思います。Scrapy/Python - いくつかの歩留まりを実行する
私は小さなコードで試してみて、原理を尋ねます:cleanData
とassignProductValues
は決して呼び出されません - なぜですか?
def parse(self, response):
for href in response.xpath("//a[@class='product--title']/@href"):
url = href.extract()
yield scrapy.Request(url, callback=super(MyclassSpider, self).scrapeProduct)
yield scrapy.Request(url, callback=super(MyclassSpider, self).cleanData)
yield scrapy.Request(url, callback=super(MyclassSpider, self).assignProductValues)
私は降伏を使用しているとき、私はジェネレータを作成することを理解したが2番目と3番目の収率は最初の収量またはどのように私は彼らが呼ばれて達成することができます後に呼び出されていない理由を私は理解していません。
-
それから私は別の方法を試してみました:私は、ウェブサイトへの3つの要求を行うにはしたくない - データと一つだけと仕事。ここでは何が起こる
def parse(self, response):
for href in response.xpath("//a[@class='product--title']/@href"):
url = href.extract()
item = MyItem()
response = scrapy.Request(url, meta={'item': item}, callback=super(MyclassSpider, self).scrapeProduct)
super(MyclassSpider, self).cleanData(response)
super(MyclassSpider, self).assignProductValues(response)
yield response
されており、scrapeProduct
はしばらく時間がかかるかもしれない、と呼ばれています。 (私は5秒遅れている)。 しかし、cleanData
とassignProductValues
は、30回のようにすぐに呼び出されています(forとtrueが頻繁に繰り返される)。 3つのメソッドを1つずつ、Webサイトに対して1つのリクエストで実行するにはどうすればよいですか?
これは、私が避けたい同じページに3つのリクエストを行うことを意味します。どのようにそれが可能でしょうか? – Chris