Scrapy模擬表單和Ajax傳送POST請求
阿新 • • 發佈:2019-02-18
scrapy.FormRequest
普通請求使用scrapy.Request類就可以實現,但是遇到模擬表單或Ajax提交post請求的時候,Request類就不如 子類 FormRequest類方便了,因為他自帶 formdata ,專門用來設定表單欄位資料,預設method也是POST。
def start_requests(self):
form_data = {'f1':'1', 'f2':'100'} # 表單資料,字典格式,注意數字也要用引號引起來,否則報錯。
yield scrapy.FormRequest(url, formdata=form_data) # 還可以通過callback修改回撥函式等
scrapy.http.FormRequest
還有其他方法,如scrapy.http.FormRequest,但是感覺不如以上方法方便:
return [scrapy.http.FormRequest(
self.myurl,
formdata={'f1':'123','f2':'456'},
callback=self.parse)]
from scrapy.item import Item, Field
from scrapy.http import FormRequest
from scrapy.spider import BaseSpider
class DeltaItem(Item):
title = Field()
link = Field()
desc = Field()
class DmozSpider(BaseSpider):
name = "delta"
allowed_domains = ["delta.com"]
start_urls = ["http://www.delta.com"]
def parse(self, response):
yield FormRequest.from_response(response,
formname='flightSearchForm' ,
formdata={'departureCity[0]': 'JFK',
'destinationCity[0]': 'SFO',
'departureDate[0]': '07.20.2013',
'departureDate[1]': '07.28.2013'},
callback=self.parse1)
def parse1(self, response):
print response.status