私がクリックする必要がある受け入れ条件のフォームを持つサイトを削っています。ボタンをクリックすると、スクラップする必要があるリソースにリダイレクトされます。基本的な仕組みが働いています。これは最初のクリックスルーです。セッションが始まり、セッションがタイムアウトするまでうまくいっています。次に何らかの理由で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を永続化および/またはリフレッシュするにはどうすればよいですか。
ありがとうございます!私はそれを有効にしましたが、あなたのアドバイスは私を他の場所に見せました。問題は、ページのリクエストで受け入れフォームに指示されていますが、セッションが見つかってリダイレクトされているようです。しかし、response.urlは更新されていないようです。なぜなら、コールバックにはリダイレクトURLがまだあるからです。私はデータが掻き取られるので、私は正しいページにいることを知っている。リクエストでレスポンスURLが更新されないのはなぜですか?これは私がやっているすべてです:yield Request(url = details_url、callback = self.parse_details) – MoreScratch
'response.url'が更新されていないとどういう意味ですか?すべてのレスポンスがそれぞれのコールバックであれば制御されているので、 'Request'を返すと' Request'で指定した 'callback'メソッドでそれぞれの' Response'オブジェクトが捕捉されます。 – eLRuLL
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