2016-05-27 15 views
0

私がクリックする必要がある受け入れ条件のフォームを持つサイトを削っています。ボタンをクリックすると、スクラップする必要があるリソースにリダイレクトされます。基本的な仕組みが働いています。これは最初のクリックスルーです。セッションが始まり、セッションがタイムアウトするまでうまくいっています。次に何らかの理由でScrapyがリダイレクトされますが、レスポンスURLは更新されないので、重複をチェックするためにURLを使用しているので重複した項目を取得します。セッション中のセッションクッキーを維持する

例えば、私が要求していますURLは次のとおりです。

https://some-internal-web-page/Records/Details/119ce2b7-35b4-4c63-8bd2-2bfbf77299a8 

しかし、セッションは私が手満了時:

https://some-internal-web-page/?returnUrl=%2FRecords%2FDetails%2F119ce2b7-35b4-4c63-8bd2-2bfbf77299a8 

ここに私のコードです:

# function to get through accept dialog 
def parse(self, response): 
    yield FormRequest.from_response(response, formdata={"value":"Accept"}, callback=self.after_accept) 

# function to parse markup 
def after_accept(self, response): 

    global latest_inspection_date 

    urls = ['http://some-internal-web-page/Records?SearchText=&SortMode=MostRecentlyHired&page=%s&PageSize=25' % page for page in xrange(1,500)] 

    for u in urls: 
     yield Request(u, callback=self.parse_list) 

だから私の質問私が必要とするURLの代わりにリダイレクトURLを取得しないように、セッションCookieを永続化および/またはリフレッシュするにはどうすればよいですか。

答えて

1

デフォルトではCookieが有効になっており、すべてのコールバックに渡されます。COOKIES_ENABLED=Trueを有効にしてください(settings.py)。

COOKIES_DEBUG=True(デフォルトではFalse)でデバッグログを有効にして、Cookieが正しく渡されているかどうかを確認することもできます。

+0

ありがとうございます!私はそれを有効にしましたが、あなたのアドバイスは私を他の場所に見せました。問題は、ページのリクエストで受け入れフォームに指示されていますが、セッションが見つかってリダイレクトされているようです。しかし、response.urlは更新されていないようです。なぜなら、コールバックにはリダイレクトURLがまだあるからです。私はデータが掻き取られるので、私は正しいページにいることを知っている。リクエストでレスポンスURLが更新されないのはなぜですか?これは私がやっているすべてです:yield Request(url = details_url、callback = self.parse_details) – MoreScratch

+0

'response.url'が更新されていないとどういう意味ですか?すべてのレスポンスがそれぞれのコールバックであれば制御されているので、 'Request'を返すと' Request'で指定した 'callback'メソッドでそれぞれの' Response'オブジェクトが捕捉されます。 – eLRuLL

+0

ScrapyはURLのリスト詳細ページ(例えば、https:// some-internal-web-page/Records/Details/119ce2b7 ...など)では、実際にそれを要求したとき(セッションが古くなっていると仮定して)、受け入れフォームが返され、セッションがチェックされ、要求が行われます。しかし、parse_detailsで取得するresponse.urlは、詳細ページのURLではなく、リダイレクトURLです(例:https:// some-internal-web-page /?returnUrl =%2FRecords%2FDetails%2F119ce2b7)。だから、Requestsがparse_detailsに渡すURLは301の後に更新されないようです。 – MoreScratch

関連する問題