私は、不動産の提供を含むウェブサイトをクロールするためにスクラムスパイダーを実装しています。このサイトには不動産業者に電話番号が記載されています。 scrapyによって生成された要求は、サーバーからエラーを返しますが、Postmanから送信された同じ要求は、要求されたデータを返します。Scrapy ajax POSTリクエストは機能しませんが、Postmanで働いています
ここでサイトのURLです:https://www.otodom.pl/oferta/piekne-mieszkanie-na-mokotowie-do-wynajecia-ID3ezHA.html
私はChromeの開発ツールで[ネットワーク]タブを使用して要求を記録しました。 ajaxリクエストのURLは次のとおりです。enter link description hereリクエストを送信するために必要なデータは、ページのソースに含まれるCSRFトークンで、定期的に変更されます。フォームデータとしてCSRFトークンのみを与える郵便配達では、期待される答えが得られます。すべてがOKであるべきにもかかわらず、
token_input = response.xpath('//script[contains(./text(), "csrf")]/text()').extract_first()
csrf_token = token_input[23:-4]
offerID_input = response.xpath('//link[@rel="canonical"]/@href').extract_first()
offerID = (offerID_input[:-5])[-7:]
form_data = {'CSRFToken' : csrf_token}
request_to_send = scrapy.Request(url='https://www.otodom.pl/ajax/misc/contact/phone/3ezHA/', headers = {"Content-Type" : "application/x-www-form-urlencoded"}, method="POST", body=urllib.urlencode(form_data), callback = self.get_phone)
yield request_to_send
は、残念ながら、私はエラーを取得:
これは私がscrapyでリクエストを構築する方法です。誰が何が問題なのか考えている人はいますか?おそらくエンコーディングと結びついていますか?このサイトはutf-8を使用しています。
は、私もそれを取得するコードを掲載しました。問題はリクエストにあり、必要なすべてのデータがあり、エラーが返されます。 – jkwi
@jkwiああ、申し訳ありませんが、私はあなたの質問を誤解しました。完全な答えは私の編集を参照してください。 – Granitosaurus
更新いただきありがとうございます、それは魅力的なように機能しています。乾杯。 – jkwi