2016-07-26 9 views
0

検索フォームを持つウェブサイトをスクラップするためにスクラップを使用しようとしていますが、検索の実行時に同時にリクエストすることは難しいです: 検索を実行すると、検索の前後に複数の検索を行うことはできません。そうしないと、以前の検索の結果にもうアクセスできなくなります。例えばスクラップで検索フォームをスクラップする方法

が基準Aと検索を開始し、それがIDとページにリダイレクトし、それぞれの結果の詳細は、このIDを再利用:

list.do?anchor=51edc79.0 
details.do?anchor=51edc79.0.0 
details.do?anchor=51edc79.0.1 

私は新しい検索を開始した場合基準B、それは新しいIDです:

list.do?anchor=5200109.0 
details.do?anchor=5200109.0.0 
details.do?anchor=5200109.0.1 

しかし、今第一検索の結果はもうアクセスできません:

details.do?anchor=51edc79.0.2 => cannot find 
details.do?anchor=51edc79.0.3 => cannot find 

第1回の検索の結果がすべて取得されるまで2回目の検索が開始されないように一度に1回のリクエストしかできませんが、より迅速に検索してください。 したがって、検索のすべての結果が取得されるまで、2番目の検索を開始しないことが考えられます。

あなたはどのように治療をしますか?最初の検索からのすべてのページが行われた前に、私は複数の要求(CONCURRENT_REQUESTS)および使用の優先順位を許さ

は、第二検索が開始されました。あなたは同じクモで複数のクッキーを管理する必要がありますので、

おかげ

答えて

1

通常セッションは、クッキーに依存し、cookiejars are the solution here

のみ、異なるのCookieJar持つすべての検索要求を行う通過を保つために覚えていますすべての関連リクエストを含むcookiejar scrapyが複製要求としてそれらをフィルタリングしないようにdont_filter引数を使用し

class MySpider(Spider): 
    name = "myspider" 

    number_of_sessions = 5 

    def start_requests(self): 
     for i in range(self.number_of_sessions): 
      yield Request(
       'homepage.com', 
       meta={'cookiejar': i}, 
       dont_filter=True, 
       callback=self.parse, 
      ) 

:これを試してクモの先頭からクッキーを制御するには

+0

お返事ありがとうございます。私は試しましたが、検索で表示されるIDは実際には実際のセッションではないので、Cookiejarで新しい条件を使用して新しい検索を開始すると、エラーが発生します(サーバーは500で応答します。サーバー)。実際のセッションは、ホームページにアクセスするときに開始URLで作成されたようです。だから私はホームページ上でcookiejarを使わなければなりません( 'Home-> Search-> Result')。それは、各基準で検索を開始する前に基準値を得るための出発点としてホームページを使用して以来、複雑になっています。 : -/ – Ted

+0

クロールの開始以来、cookiejarsを制御する必要があります。私の更新された回答を確認してください。 – eLRuLL

+0

おそらく私は何かが分かっていませんが、私が理解しているところから、各セッションで、すべての結果が取得されるまで次の検索に移動することはできません。私は別の方法でcookiejarを使用できるかどうかを確認します。とにかくありがとう。 – Ted

関連する問題