我正在實施一個scrapy蜘蛛抓取包含房地產優惠的網站。該網站包含一個電話號碼,房地產經紀人,可以retreived是一個阿賈克斯post請求。由scrapy產生的請求從服務器返回錯誤,而從Postman發送的相同請求返回所需的數據。Scrapy ajax POST請求不起作用,雖然在Postman工作
下面是該網站網址:https://www.otodom.pl/oferta/piekne-mieszkanie-na-mokotowie-do-wynajecia-ID3ezHA.html
我記錄使用Chrome的開發工具網絡選項卡中的請求。 ajax請求的URL是:enter link description here發送請求所需的數據是頁面源代碼中包含的CSRFtoken,其定期更改。在Postman中,只將CSRFtoken作爲表單數據給出了預期的答案。
我這是怎麼構建scrapy請求:
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
不幸的是,我得到一個錯誤,但一切都應該沒問題。有誰知道可能是什麼問題?是可能與編碼連接?該網站使用utf-8。
我沒有在獲得令牌的問題,我甚至張貼得到它的代碼。問題在於請求 - 它具有所需的所有數據,並返回錯誤。 – jkwi
@jkwi哦對不起,我誤解了你的問題。查看我的編輯以獲得完整答案。 – Granitosaurus
感謝您的更新,它就像一個魅力。乾杯。 – jkwi