Scrapyを使用してスクレイパーを作成する途中ですが、その非同期動作が問題を引き起こす可能性があることを心配しています。Scrapyを使用して2つのサイトからアイテムを繰り返し取得する
私はx
をそれぞれ得ているいくつかのリンクa
からのページから始めます。これらはx
が保存(ダウンロード)されます。次に私は別のページb
に行きます。私はa
リンクから入手した情報を使用します(それはすべてが一定です)。y
を選択してダウンロードしてください。
次に私は "x
とy
をペアにして、どのように重要ではないかということは、x
とy
の両方が存在する(ダウンロードされる)ことです。
開始ページ(start_urls
)が処理されたと見なし、ページをめくるためのリンクを取得します(ページ1にあり、ページ2に移動しています)。プロセスは最初から。
コードは、おおよそ次のようになります。
# ..imports, class etc.
start_url = ['bla']
start_url_buddy = ['bli']
def parse(self, response):
urls = response.xpath(...)
for url in urls:
yield scrapy.Request(url, callback=self.parse_child)
yield scrapy.Request(start_url_buddy, callback=self.parse_buddy)
pair_function(self.info)
# Finished processing start page. Now turning the page.
# could do smth like this to get next page:
nextpage_url = response.xpath([email protected])
yield scrapy.Request(nextpage_url)
# or maybe something like this?
start_urls.append(response.xpath([email protected]))
# links `a`
def parse_child(self, response):
# info for processing link `b`
self.info = response.xpath(...)
# Download link
x = response.xpath(...)
# urlopen etc. write x to file in central dir
# link `b`
def parse_buddy(self, response):
# Download link
y = response.xpath(...self.info...)
# urlopen etc. write y to file in central dir
私は(私は、マージ機能のATMをいじる取得しています、まだ一部のページめくりに得と意図したとおりにそれが機能するかどうか心配していませんx
とy
は1ページで正常に動作します)。私はの前で、「ページをめくる」(解析機能が再度あるはずです)の前にある限り、x
とy
の順番を気にしません。
私はthisのような他の2つの質問を見ましたが、私はそれらから明確な答えを得ることができませんでした。私の基本的な問題は、非同期性がどのくらい正確に実装されているかについてはわかりません(ドキュメントで説明されていないようです)。
EDIT:私が怖がっていることを明らかにするには、前のものが終了する前にyield scrapy.Request(nextpage_url)
が呼び出されるということです。私は今、すべてが完了した後でstart_urls
に追加しただけで、それに対して安全なガードができると考えています(ロジックでは、追加されたURLでparse
関数が呼び出されるはずです)
これを実行する前に、ページは順番に要求されますが、応答は非同期で受信されます。あなたが求めているのはこれですか? – Tyler
OPを編集して、私が恐れていることをより明確にします。 – Nimitz14